multi-pack-index: verify corrupt chunk lookup table
Signed-off-by: Derrick Stolee <dstolee@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
53ad040744
commit
d3f8e21170
3
midx.c
3
midx.c
@ -100,6 +100,9 @@ struct multi_pack_index *load_multi_pack_index(const char *object_dir, int local
|
||||
uint64_t chunk_offset = get_be64(m->data + MIDX_HEADER_SIZE + 4 +
|
||||
MIDX_CHUNKLOOKUP_WIDTH * i);
|
||||
|
||||
if (chunk_offset >= m->data_len)
|
||||
die(_("invalid chunk offset (too large)"));
|
||||
|
||||
switch (chunk_id) {
|
||||
case MIDX_CHUNKID_PACKNAMES:
|
||||
m->chunk_pack_names = m->data + chunk_offset;
|
||||
|
@ -178,6 +178,9 @@ test_expect_success 'verify bad signature' '
|
||||
MIDX_BYTE_VERSION=4
|
||||
MIDX_BYTE_OID_VERSION=5
|
||||
MIDX_BYTE_CHUNK_COUNT=6
|
||||
MIDX_HEADER_SIZE=12
|
||||
MIDX_BYTE_CHUNK_ID=$MIDX_HEADER_SIZE
|
||||
MIDX_BYTE_CHUNK_OFFSET=$(($MIDX_HEADER_SIZE + 4))
|
||||
|
||||
test_expect_success 'verify bad version' '
|
||||
corrupt_midx_and_verify $MIDX_BYTE_VERSION "\00" $objdir \
|
||||
@ -199,6 +202,16 @@ test_expect_success 'verify extended chunk count' '
|
||||
"terminating multi-pack-index chunk id appears earlier than expected"
|
||||
'
|
||||
|
||||
test_expect_success 'verify missing required chunk' '
|
||||
corrupt_midx_and_verify $MIDX_BYTE_CHUNK_ID "\01" $objdir \
|
||||
"missing required"
|
||||
'
|
||||
|
||||
test_expect_success 'verify invalid chunk offset' '
|
||||
corrupt_midx_and_verify $MIDX_BYTE_CHUNK_OFFSET "\01" $objdir \
|
||||
"invalid chunk offset (too large)"
|
||||
'
|
||||
|
||||
test_expect_success 'repack removes multi-pack-index' '
|
||||
test_path_is_file $objdir/pack/multi-pack-index &&
|
||||
git repack -adf &&
|
||||
|
Loading…
Reference in New Issue
Block a user