fsck: check rev-index checksums

The previous change added calls to verify_pack_revindex() in
builtin/fsck.c, but the implementation of the method was left empty. Add
the first and most-obvious check to this method: checksum verification.

While here, create a helper method in the test script that makes it easy
to adjust the .rev file and check that 'git fsck' reports the correct
error message.

Signed-off-by: Derrick Stolee <derrickstolee@github.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Derrick Stolee
2023-04-17 16:21:39 +00:00
committed by Junio C Hamano
parent 0d30feef3c
commit d975fe1fa5
2 changed files with 50 additions and 0 deletions

View File

@ -145,4 +145,44 @@ test_expect_success 'fsck succeeds on good rev-index' '
)
'
test_expect_success 'set up rev-index corruption tests' '
git init corrupt &&
(
cd corrupt &&
test_commit commit &&
git -c pack.writeReverseIndex=true repack -ad &&
revfile=$(ls .git/objects/pack/pack-*.rev) &&
chmod a+w $revfile &&
cp $revfile $revfile.bak
)
'
corrupt_rev_and_verify () {
(
pos="$1" &&
value="$2" &&
error="$3" &&
cd corrupt &&
revfile=$(ls .git/objects/pack/pack-*.rev) &&
# Reset to original rev-file.
cp $revfile.bak $revfile &&
printf "$value" | dd of=$revfile bs=1 seek="$pos" conv=notrunc &&
test_must_fail git fsck 2>err &&
grep "$error" err
)
}
test_expect_success 'fsck catches invalid checksum' '
revfile=$(ls corrupt/.git/objects/pack/pack-*.rev) &&
orig_size=$(wc -c <$revfile) &&
hashpos=$((orig_size - 10)) &&
corrupt_rev_and_verify $hashpos bogus \
"invalid checksum"
'
test_done