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>
Derrick Stolee committed
Sep 13, 2018 at 11:02 UTC
d3f8e211700c6c38f905a7d7ab1338df4784c79d
2 files changed
+16
midx.c
+3
@@ -100,6 +100,9 @@ struct multi_pack_index *load_multi_pack_index(const char *object_dir, int local
100
uint64_t chunk_offset = get_be64(m->data + MIDX_HEADER_SIZE + 4 +
101
MIDX_CHUNKLOOKUP_WIDTH * i);
102
103
+ if (chunk_offset >= m->data_len)
104
+ die(_("invalid chunk offset (too large)"));
105
+
106
switch (chunk_id) {
107
case MIDX_CHUNKID_PACKNAMES:
108
m->chunk_pack_names = m->data + chunk_offset;
t/t5319-multi-pack-index.sh
+13
@@ -178,6 +178,9 @@ test_expect_success 'verify bad signature' '
178
MIDX_BYTE_VERSION=4
179
MIDX_BYTE_OID_VERSION=5
180
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))
184
185
test_expect_success 'verify bad version' '
186
corrupt_midx_and_verify $MIDX_BYTE_VERSION "\00" $objdir \
@@ -199,6 +202,16 @@ test_expect_success 'verify extended chunk count' '
202
"terminating multi-pack-index chunk id appears earlier than expected"
203
'
204
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
+
215
test_expect_success 'repack removes multi-pack-index' '
216
test_path_is_file $objdir/pack/multi-pack-index &&
217
git repack -adf &&