mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-29 20:42:23 +00:00
Fix implementation of strndup to not overrun
This commit is contained in:
parent
0f674411e9
commit
2364735c8f
11
src/util.h
11
src/util.h
@ -42,12 +42,11 @@ GIT_INLINE(char *) git__strdup(const char *str)
|
|||||||
|
|
||||||
GIT_INLINE(char *) git__strndup(const char *str, size_t n)
|
GIT_INLINE(char *) git__strndup(const char *str, size_t n)
|
||||||
{
|
{
|
||||||
size_t length;
|
size_t length = 0;
|
||||||
char *ptr;
|
char *ptr;
|
||||||
|
|
||||||
length = strlen(str);
|
while (length < n && str[length])
|
||||||
if (n < length)
|
++length;
|
||||||
length = n;
|
|
||||||
|
|
||||||
ptr = (char*)malloc(length + 1);
|
ptr = (char*)malloc(length + 1);
|
||||||
if (!ptr) {
|
if (!ptr) {
|
||||||
@ -55,7 +54,9 @@ GIT_INLINE(char *) git__strndup(const char *str, size_t n)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(ptr, str, length);
|
if (length)
|
||||||
|
memcpy(ptr, str, length);
|
||||||
|
|
||||||
ptr[length] = '\0';
|
ptr[length] = '\0';
|
||||||
|
|
||||||
return ptr;
|
return ptr;
|
||||||
|
Loading…
Reference in New Issue
Block a user