mirror of
https://github.com/git/git.git
synced 2026-08-07 16:42:02 +00:00
reftable/block: fix use of uninitialized memory when binsearch fails
When doing the binary search through our restart offsets we may hit an error in case `restart_needle_less()` fails to decode the record at the given offset. While we correctly detect this case and error out, it will cause us to call `reftable_record_release()` on the yet-uninitialized record. Fix this by initializing the record earlier. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
0d77a81854
commit
986590f1f7
@@ -517,6 +517,10 @@ int block_iter_seek_key(struct block_iter *it, struct reftable_buf *want)
|
||||
int err = 0;
|
||||
size_t i;
|
||||
|
||||
err = reftable_record_init(&rec, reftable_block_type(it->block));
|
||||
if (err < 0)
|
||||
goto done;
|
||||
|
||||
/*
|
||||
* Perform a binary search over the block's restart points, which
|
||||
* avoids doing a linear scan over the whole block. Like this, we
|
||||
@@ -558,10 +562,6 @@ int block_iter_seek_key(struct block_iter *it, struct reftable_buf *want)
|
||||
else
|
||||
it->next_off = it->block->header_off + 4;
|
||||
|
||||
err = reftable_record_init(&rec, reftable_block_type(it->block));
|
||||
if (err < 0)
|
||||
goto done;
|
||||
|
||||
/*
|
||||
* We're looking for the last entry less than the wanted key so that
|
||||
* the next call to `block_reader_next()` would yield the wanted
|
||||
|
||||
Reference in New Issue
Block a user