reftable/reader: handle allocation failures for unindexed reader
Handle allocation failures when creating unindexed readers. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Patrick Steinhardt committed
Oct 2, 2024 at 12:55 UTC
18da60029319733e2d931f2758a8e47b8b25b117
1 file changed
+17
-6
reftable/reader.c
+17
-6
@@ -734,19 +734,30 @@ static int reftable_reader_refs_for_unindexed(struct reftable_reader *r,
734
REFTABLE_ALLOC_ARRAY(ti, 1);
735
table_iter_init(ti, r);
736
err = table_iter_seek_start(ti, BLOCK_TYPE_REF, 0);
737
- if (err < 0) {
738
- reftable_free(ti);
739
- return err;
740
- }
737
+ if (err < 0)
738
+ goto out;
739
742
- filter = reftable_malloc(sizeof(struct filtering_ref_iterator));
740
+ filter = reftable_malloc(sizeof(*filter));
741
+ if (!filter) {
742
+ err = REFTABLE_OUT_OF_MEMORY_ERROR;
743
+ goto out;
744
+ }
745
*filter = empty;
746
747
strbuf_add(&filter->oid, oid, oid_len);
748
iterator_from_table_iter(&filter->it, ti);
749
750
iterator_from_filtering_ref_iterator(it, filter);
749
- return 0;
751
+
752
+ err = 0;
753
+
754
+out:
755
+ if (err < 0) {
756
+ if (ti)
757
+ table_iter_close(ti);
758
+ reftable_free(ti);
759
+ }
760
+ return err;
761
}
762
763
int reftable_reader_refs_for(struct reftable_reader *r,