File tree Expand file tree Collapse file tree 2 files changed +17
-0
lines changed Expand file tree Collapse file tree 2 files changed +17
-0
lines changed Original file line number Diff line number Diff line change @@ -950,5 +950,14 @@ int verify_midx_file(const char *object_dir)
950
950
midx_report ("failed to load pack in position %d" , i );
951
951
}
952
952
953
+ for (i = 0 ; i < 255 ; i ++ ) {
954
+ uint32_t oid_fanout1 = ntohl (m -> chunk_oid_fanout [i ]);
955
+ uint32_t oid_fanout2 = ntohl (m -> chunk_oid_fanout [i + 1 ]);
956
+
957
+ if (oid_fanout1 > oid_fanout2 )
958
+ midx_report (_ ("oid fanout out of order: fanout[%d] = %" PRIx32 " > %" PRIx32 " = fanout[%d]" ),
959
+ i , oid_fanout1 , oid_fanout2 , i + 1 );
960
+ }
961
+
953
962
return verify_midx_error ;
954
963
}
Original file line number Diff line number Diff line change @@ -186,6 +186,9 @@ MIDX_CHUNK_LOOKUP_WIDTH=12
186
186
MIDX_OFFSET_PACKNAMES=$(( $MIDX_HEADER_SIZE + \
187
187
$MIDX_NUM_CHUNKS * $MIDX_CHUNK_LOOKUP_WIDTH ))
188
188
MIDX_BYTE_PACKNAME_ORDER=$(( $MIDX_OFFSET_PACKNAMES + 2 ))
189
+ MIDX_OFFSET_OID_FANOUT=$(( $MIDX_OFFSET_PACKNAMES + 652 ))
190
+ MIDX_OID_FANOUT_WIDTH=4
191
+ MIDX_BYTE_OID_FANOUT_ORDER=$(( MIDX_OFFSET_OID_FANOUT + 250 * $MIDX_OID_FANOUT_WIDTH + 1 ))
189
192
190
193
test_expect_success ' verify bad version' '
191
194
corrupt_midx_and_verify $MIDX_BYTE_VERSION "\00" $objdir \
@@ -227,6 +230,11 @@ test_expect_success 'verify packnames out of order' '
227
230
"failed to load pack"
228
231
'
229
232
233
+ test_expect_success ' verify oid fanout out of order' '
234
+ corrupt_midx_and_verify $MIDX_BYTE_OID_FANOUT_ORDER "\01" $objdir \
235
+ "oid fanout out of order"
236
+ '
237
+
230
238
test_expect_success ' repack removes multi-pack-index' '
231
239
test_path_is_file $objdir/pack/multi-pack-index &&
232
240
git repack -adf &&
You can’t perform that action at this time.
0 commit comments