diff options
| author | Patrick Steinhardt <ps@pks.im> | 2024-10-02 12:55:56 +0200 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2024-10-02 07:53:53 -0700 |
| commit | 18da60029319733e2d931f2758a8e47b8b25b117 (patch) | |
| tree | 4791ac03a80fdc90eeeaac2312e728bf0cf4140d /reftable/reader.c | |
| parent | 802c0646ac3c04a16adafde5e7cf899f5fc46821 (diff) | |
| download | git-18da60029319733e2d931f2758a8e47b8b25b117.tar.xz | |
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>
Diffstat (limited to 'reftable/reader.c')
| -rw-r--r-- | reftable/reader.c | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/reftable/reader.c b/reftable/reader.c index 6494ce2e32..485ee085da 100644 --- a/reftable/reader.c +++ b/reftable/reader.c @@ -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, |
