Commit 2364735c by Philip Kelley

Fix implementation of strndup to not overrun

parent 0f674411
...@@ -42,12 +42,11 @@ GIT_INLINE(char *) git__strdup(const char *str) ...@@ -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) ...@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment