Merge branch 'ab/commit-graph-fixes'
Code cleanup with more careful error checking before using data read from the commit-graph file. * ab/commit-graph-fixes: commit-graph: improve & i18n error messages commit-graph write: don't die if the existing graph is corrupt commit-graph verify: detect inability to read the graph commit-graph: don't pass filename to load_commit_graph_one_fd_st() commit-graph: don't early exit(1) on e.g. "git status" commit-graph: fix segfault on e.g. "git status" commit-graph tests: test a graph that's too small commit-graph tests: split up corrupt_graph_and_verify()
This commit is contained in:
@ -366,6 +366,26 @@ GRAPH_OCTOPUS_DATA_OFFSET=$(($GRAPH_COMMIT_DATA_OFFSET + \
|
||||
GRAPH_BYTE_OCTOPUS=$(($GRAPH_OCTOPUS_DATA_OFFSET + 4))
|
||||
GRAPH_BYTE_FOOTER=$(($GRAPH_OCTOPUS_DATA_OFFSET + 4 * $NUM_OCTOPUS_EDGES))
|
||||
|
||||
corrupt_graph_setup() {
|
||||
cd "$TRASH_DIRECTORY/full" &&
|
||||
test_when_finished mv commit-graph-backup $objdir/info/commit-graph &&
|
||||
cp $objdir/info/commit-graph commit-graph-backup
|
||||
}
|
||||
|
||||
corrupt_graph_verify() {
|
||||
grepstr=$1
|
||||
test_must_fail git commit-graph verify 2>test_err &&
|
||||
grep -v "^+" test_err >err &&
|
||||
test_i18ngrep "$grepstr" err &&
|
||||
if test "$2" != "no-copy"
|
||||
then
|
||||
cp $objdir/info/commit-graph commit-graph-pre-write-test
|
||||
fi &&
|
||||
git status --short &&
|
||||
GIT_TEST_COMMIT_GRAPH_DIE_ON_LOAD=true git commit-graph write &&
|
||||
git commit-graph verify
|
||||
}
|
||||
|
||||
# usage: corrupt_graph_and_verify <position> <data> <string> [<zero_pos>]
|
||||
# Manipulates the commit-graph file at the position
|
||||
# by inserting the data, optionally zeroing the file
|
||||
@ -376,19 +396,28 @@ corrupt_graph_and_verify() {
|
||||
pos=$1
|
||||
data="${2:-\0}"
|
||||
grepstr=$3
|
||||
cd "$TRASH_DIRECTORY/full" &&
|
||||
corrupt_graph_setup &&
|
||||
orig_size=$(wc -c < $objdir/info/commit-graph) &&
|
||||
zero_pos=${4:-${orig_size}} &&
|
||||
test_when_finished mv commit-graph-backup $objdir/info/commit-graph &&
|
||||
cp $objdir/info/commit-graph commit-graph-backup &&
|
||||
printf "$data" | dd of="$objdir/info/commit-graph" bs=1 seek="$pos" conv=notrunc &&
|
||||
dd of="$objdir/info/commit-graph" bs=1 seek="$zero_pos" if=/dev/null &&
|
||||
generate_zero_bytes $(($orig_size - $zero_pos)) >>"$objdir/info/commit-graph" &&
|
||||
test_must_fail git commit-graph verify 2>test_err &&
|
||||
grep -v "^+" test_err >err &&
|
||||
test_i18ngrep "$grepstr" err
|
||||
corrupt_graph_verify "$grepstr"
|
||||
|
||||
}
|
||||
|
||||
test_expect_success POSIXPERM,SANITY 'detect permission problem' '
|
||||
corrupt_graph_setup &&
|
||||
chmod 000 $objdir/info/commit-graph &&
|
||||
corrupt_graph_verify "Could not open" "no-copy"
|
||||
'
|
||||
|
||||
test_expect_success 'detect too small' '
|
||||
corrupt_graph_setup &&
|
||||
echo "a small graph" >$objdir/info/commit-graph &&
|
||||
corrupt_graph_verify "too small"
|
||||
'
|
||||
|
||||
test_expect_success 'detect bad signature' '
|
||||
corrupt_graph_and_verify 0 "\0" \
|
||||
"graph signature"
|
||||
@ -499,6 +528,7 @@ test_expect_success 'git fsck (checks commit-graph)' '
|
||||
git fsck &&
|
||||
corrupt_graph_and_verify $GRAPH_BYTE_FOOTER "\00" \
|
||||
"incorrect checksum" &&
|
||||
cp commit-graph-pre-write-test $objdir/info/commit-graph &&
|
||||
test_must_fail git fsck
|
||||
'
|
||||
|
||||
|
Reference in New Issue
Block a user