]> git.ipfire.org Git - thirdparty/git.git/commitdiff
reftable/reader: handle allocation failures for unindexed reader
authorPatrick Steinhardt <ps@pks.im>
Wed, 2 Oct 2024 10:55:56 +0000 (12:55 +0200)
committerJunio C Hamano <gitster@pobox.com>
Wed, 2 Oct 2024 14:53:53 +0000 (07:53 -0700)
Handle allocation failures when creating unindexed readers.

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

index 6494ce2e32705e391ab1a1077dba07112cedf928..485ee085dac8645cc27977ff717c9d221573fc68 100644 (file)
@@ -734,19 +734,30 @@ static int reftable_reader_refs_for_unindexed(struct reftable_reader *r,
        REFTABLE_ALLOC_ARRAY(ti, 1);
        table_iter_init(ti, r);
        err = table_iter_seek_start(ti, BLOCK_TYPE_REF, 0);
-       if (err < 0) {
-               reftable_free(ti);
-               return err;
-       }
+       if (err < 0)
+               goto out;
 
-       filter = reftable_malloc(sizeof(struct filtering_ref_iterator));
+       filter = reftable_malloc(sizeof(*filter));
+       if (!filter) {
+               err = REFTABLE_OUT_OF_MEMORY_ERROR;
+               goto out;
+       }
        *filter = empty;
 
        strbuf_add(&filter->oid, oid, oid_len);
        iterator_from_table_iter(&filter->it, ti);
 
        iterator_from_filtering_ref_iterator(it, filter);
-       return 0;
+
+       err = 0;
+
+out:
+       if (err < 0) {
+               if (ti)
+                       table_iter_close(ti);
+               reftable_free(ti);
+       }
+       return err;
 }
 
 int reftable_reader_refs_for(struct reftable_reader *r,