]> git.ipfire.org Git - thirdparty/git.git/commitdiff
reftable/basics: fix segfault when growing `names` array fails
authorPatrick Steinhardt <ps@pks.im>
Fri, 4 Oct 2024 04:58:53 +0000 (06:58 +0200)
committerJunio C Hamano <gitster@pobox.com>
Fri, 4 Oct 2024 14:59:31 +0000 (07:59 -0700)
When growing the `names` array fails we would end up with a `NULL`
pointer. This causes two problems:

  - We would run into a segfault because we try to free names that we
    have assigned to the array already.

  - We lose track of the old array and cannot free its contents.

Fix this issue by using a temporary variable. Like this we do not
clobber the old array that we tried to reallocate, which will remain
valid when a call to realloc(3P) fails.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
reftable/basics.c

index c8396dc5253d68105e5cee34639358306457be63..9a949e5cf8085c74b447073d1c54d00f9496594d 100644 (file)
@@ -152,9 +152,11 @@ char **parse_names(char *buf, int size)
                        next = end;
                }
                if (p < next) {
-                       REFTABLE_ALLOC_GROW(names, names_len + 1, names_cap);
-                       if (!names)
+                       char **names_grown = names;
+                       REFTABLE_ALLOC_GROW(names_grown, names_len + 1, names_cap);
+                       if (!names_grown)
                                goto err;
+                       names = names_grown;
 
                        names[names_len] = reftable_strdup(p);
                        if (!names[names_len++])