aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay <raysan5@gmail.com>2019-09-13 12:58:42 +0200
committerRay <raysan5@gmail.com>2019-09-13 12:58:42 +0200
commite5d5f6e367daad6457fc2b1af3e85e96dead3ce4 (patch)
treeec0373f07b3dbdcb85d6f06845a1c1036e09b1c1
parent7caedff9ca4e405c54ba1ea586a891903658b0f1 (diff)
downloadraylib-e5d5f6e367daad6457fc2b1af3e85e96dead3ce4.tar.gz
raylib-e5d5f6e367daad6457fc2b1af3e85e96dead3ce4.zip
Review possible memory leak with my_strndup()
-rw-r--r--src/external/tinyobj_loader_c.h19
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;
}