Skip to content

Commit d3f8e21

Browse files
derrickstoleegitster
authored andcommitted
multi-pack-index: verify corrupt chunk lookup table
Signed-off-by: Derrick Stolee <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 53ad040 commit d3f8e21

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

midx.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,9 @@ struct multi_pack_index *load_multi_pack_index(const char *object_dir, int local
100100
uint64_t chunk_offset = get_be64(m->data + MIDX_HEADER_SIZE + 4 +
101101
MIDX_CHUNKLOOKUP_WIDTH * i);
102102

103+
if (chunk_offset >= m->data_len)
104+
die(_("invalid chunk offset (too large)"));
105+
103106
switch (chunk_id) {
104107
case MIDX_CHUNKID_PACKNAMES:
105108
m->chunk_pack_names = m->data + chunk_offset;

t/t5319-multi-pack-index.sh

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,9 @@ test_expect_success 'verify bad signature' '
178178
MIDX_BYTE_VERSION=4
179179
MIDX_BYTE_OID_VERSION=5
180180
MIDX_BYTE_CHUNK_COUNT=6
181+
MIDX_HEADER_SIZE=12
182+
MIDX_BYTE_CHUNK_ID=$MIDX_HEADER_SIZE
183+
MIDX_BYTE_CHUNK_OFFSET=$(($MIDX_HEADER_SIZE + 4))
181184

182185
test_expect_success 'verify bad version' '
183186
corrupt_midx_and_verify $MIDX_BYTE_VERSION "\00" $objdir \
@@ -199,6 +202,16 @@ test_expect_success 'verify extended chunk count' '
199202
"terminating multi-pack-index chunk id appears earlier than expected"
200203
'
201204

205+
test_expect_success 'verify missing required chunk' '
206+
corrupt_midx_and_verify $MIDX_BYTE_CHUNK_ID "\01" $objdir \
207+
"missing required"
208+
'
209+
210+
test_expect_success 'verify invalid chunk offset' '
211+
corrupt_midx_and_verify $MIDX_BYTE_CHUNK_OFFSET "\01" $objdir \
212+
"invalid chunk offset (too large)"
213+
'
214+
202215
test_expect_success 'repack removes multi-pack-index' '
203216
test_path_is_file $objdir/pack/multi-pack-index &&
204217
git repack -adf &&

0 commit comments

Comments
 (0)