diff options
Diffstat (limited to 'lib/fstree/fstree_from_dir.c')
-rw-r--r-- | lib/fstree/fstree_from_dir.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/lib/fstree/fstree_from_dir.c b/lib/fstree/fstree_from_dir.c index 9aab5df..d6fac86 100644 --- a/lib/fstree/fstree_from_dir.c +++ b/lib/fstree/fstree_from_dir.c @@ -25,6 +25,7 @@ static char *get_file_path(tree_node_t *n, const char *name) { char *ptr, *new; + size_t len; int ret; if (n->parent == NULL) { @@ -41,7 +42,13 @@ static char *get_file_path(tree_node_t *n, const char *name) ret = canonicalize_name(ptr); assert(ret == 0); - new = realloc(ptr, strlen(ptr) + strlen(name) + 2); + if (SZ_ADD_OV(strlen(ptr), strlen(name), &len) || + SZ_ADD_OV(len, 2, &len)) { + errno = EOVERFLOW; + goto fail; + } + + new = realloc(ptr, len); if (new == NULL) goto fail; |