]> git.ipfire.org Git - thirdparty/git.git/commitdiff
t5319: corrupt more bytes of the midx checksum
authorJeff King <peff@peff.net>
Tue, 16 Nov 2021 21:38:50 +0000 (16:38 -0500)
committerJunio C Hamano <gitster@pobox.com>
Thu, 18 Nov 2021 22:35:08 +0000 (14:35 -0800)
One of the tests in t5319 corrupts the checksum of the midx file by
writing a single 0xff over the final byte, and then confirms that we
detect the problem. This usually works fine, but would break if the
actual checksum ended with that same byte already.

It seems like this should happen in 1 out of 256 test runs, but it turns
out to be less often in practice. The contents of the midx are mostly
deterministic because it's based on the objects, and we remove most
sources of randomness by setting GIT_COMMITTER_DATE, etc.  However,
there's still some randomness: some objects are duplicated between
packs, and the midx must decide which to use, which can be based on
timing.

So very occasionally we can end up with a real 0xff byte, and the test
fails. The most robust fix would be to read out the final byte and then
change it to something else (e.g., adding 1 mod 256). But that's awkward
to do in shell. Let's just blindly corrupt 10 bytes instead of 1, which
reduces our chances of an accidental noop to 1 in 2^80.

Reported-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Jeff King <peff@peff.net>
Reviewed-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t5319-multi-pack-index.sh

index 3d4d9f10c31b2ff1a0c5bb21458a3ef54113802f..a2576734f3c19ed35374e4487b7f8ef9fca5e6a9 100755 (executable)
@@ -419,8 +419,10 @@ test_expect_success 'corrupt MIDX is not reused' '
 '
 
 test_expect_success 'verify incorrect checksum' '
-       pos=$(($(wc -c <$objdir/pack/multi-pack-index) - 1)) &&
-       corrupt_midx_and_verify $pos "\377" $objdir "incorrect checksum"
+       pos=$(($(wc -c <$objdir/pack/multi-pack-index) - 10)) &&
+       corrupt_midx_and_verify $pos \
+               "\377\377\377\377\377\377\377\377\377\377" \
+               $objdir "incorrect checksum"
 '
 
 test_expect_success 'repack progress off for redirected stderr' '