Re: [PATCH v3 16/20] commit-graph: verify contents match checksum
From: SZEDER Gábor <hidden>
Date: 2018-05-30 12:35:39
quoted hunk ↗ jump to hunk
diff --git a/commit-graph.c b/commit-graph.c index d2b291aca2..a33600c584 100644 --- a/commit-graph.c +++ b/commit-graph.c@@ -841,6 +841,7 @@ void write_commit_graph(const char *obj_dir, oids.nr =3D 0; }=20 +#define VERIFY_COMMIT_GRAPH_ERROR_HASH 2 static int verify_commit_graph_error; =20 static void graph_report(const char *fmt, ...)@@ -860,7 +861,9 @@ static void graph_report(const char *fmt, ...) int verify_commit_graph(struct commit_graph *g) { uint32_t i, cur_fanout_pos =3D 0; - struct object_id prev_oid, cur_oid; + struct object_id prev_oid, cur_oid, checksum; + struct hashfile *f; + int devnull;=20 if (!g) { graph_report("no commit-graph file loaded");@@ -879,6 +882,15 @@ int verify_commit_graph(struct commit_graph *g) if (verify_commit_graph_error) return verify_commit_graph_error;=20 + devnull =3D open("/dev/null", O_WRONLY); + f =3D hashfd(devnull, NULL); + hashwrite(f, g->data, g->data_len - g->hash_len); + finalize_hashfile(f, checksum.hash, CSUM_CLOSE); + if (hashcmp(checksum.hash, g->data + g->data_len - g->hash_len)) { + graph_report(_("the commit-graph file has incorrect checksum and is likely corrupt"));
This error message is translated ...
quoted hunk ↗ jump to hunk
diff --git a/t/t5318-commit-graph.sh b/t/t5318-commit-graph.sh index 240aef6add..2680a2ebff 100755 --- a/t/t5318-commit-graph.sh +++ b/t/t5318-commit-graph.sh
quoted hunk ↗ jump to hunk
@@ -388,4 +389,9 @@ test_expect_success 'detect incorrect parent for octopu=s merge' ' "invalid parent" ' =20 +test_expect_success 'detect invalid checksum hash' ' + corrupt_graph_and_verify $GRAPH_BYTE_FOOTER "\00" \ + "incorrect checksum"
... but here in 'corrupt_graph_and_verify' you look for "incorrect checksum" with plain 'grep' (as opposed to 'test_i18ngrep', which won't find that string in a GETTEXT_POISON build, and ultimately causes the test to fail.