diff options
| author | Ray <raysan5@gmail.com> | 2019-09-13 12:58:42 +0200 |
|---|---|---|
| committer | Ray <raysan5@gmail.com> | 2019-09-13 12:58:42 +0200 |
| commit | e5d5f6e367daad6457fc2b1af3e85e96dead3ce4 (patch) | |
| tree | ec0373f07b3dbdcb85d6f06845a1c1036e09b1c1 | |
| parent | 7caedff9ca4e405c54ba1ea586a891903658b0f1 (diff) | |
| download | raylib-e5d5f6e367daad6457fc2b1af3e85e96dead3ce4.tar.gz raylib-e5d5f6e367daad6457fc2b1af3e85e96dead3ce4.zip | |
Review possible memory leak with my_strndup()
| -rw-r--r-- | src/external/tinyobj_loader_c.h | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/src/external/tinyobj_loader_c.h b/src/external/tinyobj_loader_c.h index 846784fa..242b47d8 100644 --- a/src/external/tinyobj_loader_c.h +++ b/src/external/tinyobj_loader_c.h @@ -453,6 +453,11 @@ static void parseFloat3(float *x, float *y, float *z, const char **token) { (*z) = parseFloat(token); } +static unsigned int my_strnlen(const char *s, unsigned int n) { + const char *p = memchr(s, 0, n); + return p ? (unsigned int)(p - s) : n; +} + static char *my_strdup(const char *s, unsigned int max_length) { char *d; unsigned int len; @@ -478,15 +483,13 @@ static char *my_strndup(const char *s, unsigned int len) { if (s == NULL) return NULL; if (len == 0) return NULL; - d = (char *)TINYOBJ_MALLOC(len + 1); /* + '\0' */ - slen = strlen(s); - if (slen < len) { - memcpy(d, s, slen); - d[slen] = '\0'; - } else { - memcpy(d, s, len); - d[len] = '\0'; + slen = my_strnlen(s, len); + d = (char *)TINYOBJ_MALLOC(slen + 1); /* + '\0' */ + if (!d) { + return NULL; } + memcpy(d, s, slen); + d[slen] = '\0'; return d; } |
