]> git.ipfire.org Git - thirdparty/git.git/commitdiff
reftable/stack: handle allocation failures in `stack_compact_range()`
authorPatrick Steinhardt <ps@pks.im>
Wed, 2 Oct 2024 10:56:07 +0000 (12:56 +0200)
committerJunio C Hamano <gitster@pobox.com>
Wed, 2 Oct 2024 14:53:54 +0000 (07:53 -0700)
Handle allocation failures in `stack_compact_range()`.

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

index 1b77c9d01461d9bef8726466e55e114006f22ec4..2e6dd513d72fd33325fa02a76dd675f48b33ffa8 100644 (file)
@@ -1131,6 +1131,11 @@ static int stack_compact_range(struct reftable_stack *st,
         * from the point of view of the newer process.
         */
        REFTABLE_CALLOC_ARRAY(table_locks, last - first + 1);
+       if (!table_locks) {
+               err = REFTABLE_OUT_OF_MEMORY_ERROR;
+               goto done;
+       }
+
        for (i = last + 1; i > first; i--) {
                stack_filename(&table_name, st, reader_name(st->readers[i - 1]));
 
@@ -1312,8 +1317,18 @@ static int stack_compact_range(struct reftable_stack *st,
                 * thus have to allocate `readers_len + 1` many entries.
                 */
                REFTABLE_CALLOC_ARRAY(names, st->merged->readers_len + 1);
-               for (size_t i = 0; i < st->merged->readers_len; i++)
-                       names[i] = xstrdup(st->readers[i]->name);
+               if (!names) {
+                       err = REFTABLE_OUT_OF_MEMORY_ERROR;
+                       goto done;
+               }
+
+               for (size_t i = 0; i < st->merged->readers_len; i++) {
+                       names[i] = reftable_strdup(st->readers[i]->name);
+                       if (!names[i]) {
+                               err = REFTABLE_OUT_OF_MEMORY_ERROR;
+                               goto done;
+                       }
+               }
                first_to_replace = first;
                last_to_replace = last;
        }