From: Junio C Hamano <gitster@pobox.com>
To: "Derrick Stolee via GitGitGadget" <gitgitgadget@gmail.com>
Cc: git@vger.kernel.org, me@ttaylorr.com,
Derrick Stolee <derrickstolee@github.com>
Subject: Re: [PATCH 3/4] fsck: check rev-index position values
Date: Mon, 17 Apr 2023 15:01:23 -0700 [thread overview]
Message-ID: <xmqq1qkijhho.fsf@gitster.g> (raw)
In-Reply-To: <adbe9c8ee90e087e864bd9e0c67338974b5dbc8d.1681748502.git.gitgitgadget@gmail.com> (Derrick Stolee via GitGitGadget's message of "Mon, 17 Apr 2023 16:21:40 +0000")
"Derrick Stolee via GitGitGadget" <gitgitgadget@gmail.com> writes:
> if (!hashfile_checksum_valid((const unsigned char *)p->revindex_map, p->revindex_size)) {
> error(_("invalid checksum"));
> - return -1;
> + res = -1;
> }
>
> - return 0;
> + /* This may fail due to a broken .idx. */
> + if (create_pack_revindex_in_memory(p))
> + return res;
Here, if the revindex file itself is self consistent, res would
still be 0, so we will end up silently returning. Is the idea that
while whatever causes in-memory revindex fail to be computed is a
concern from the point of view of the repository's health, it would
be caught elsewhere as a problem for the <pack,idx> pair we are
seeing here?
> + for (size_t i = 0; i < p->num_objects; i++) {
> + uint32_t nr = p->revindex[i].nr;
> + uint32_t rev_val = get_be32(p->revindex_data + i);
> +
> + if (nr != rev_val) {
> + error(_("invalid rev-index position at %"PRIu64": %"PRIu32" != %"PRIu32""),
> + (uint64_t)i, nr, rev_val);
> + res = -1;
> + }
> + }
> +
> + return res;
> }
>
> int load_midx_revindex(struct multi_pack_index *m)
> diff --git a/t/t5325-reverse-index.sh b/t/t5325-reverse-index.sh
> index 6b7c709a1f6..5c3c80f88f0 100755
> --- a/t/t5325-reverse-index.sh
> +++ b/t/t5325-reverse-index.sh
> @@ -185,4 +185,9 @@ test_expect_success 'fsck catches invalid checksum' '
> "invalid checksum"
> '
>
> +test_expect_success 'fsck catches invalid row position' '
> + corrupt_rev_and_verify 14 "\07" \
;-)
I wondered how the patch made this "\07" portably available; it is
fed as the format string to printf in the helper, which is clever
but obviously correct way to do this. Nice.
> + "invalid rev-index position"
> +'
> +
> test_done
next prev parent reply other threads:[~2023-04-17 22:01 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-17 16:21 [PATCH 0/4] git fsck: check pack rev-index files Derrick Stolee via GitGitGadget
2023-04-17 16:21 ` [PATCH 1/4] fsck: create scaffolding for rev-index checks Derrick Stolee via GitGitGadget
2023-04-17 22:20 ` Taylor Blau
2023-04-17 16:21 ` [PATCH 2/4] fsck: check rev-index checksums Derrick Stolee via GitGitGadget
2023-04-17 22:15 ` Junio C Hamano
2023-04-18 14:24 ` Derrick Stolee
2023-04-17 22:24 ` Taylor Blau
2023-04-18 14:27 ` Derrick Stolee
2023-04-18 14:51 ` Taylor Blau
2023-04-18 14:57 ` Derrick Stolee
2023-04-18 15:03 ` Taylor Blau
2023-04-17 16:21 ` [PATCH 3/4] fsck: check rev-index position values Derrick Stolee via GitGitGadget
2023-04-17 22:01 ` Junio C Hamano [this message]
2023-04-18 14:32 ` Derrick Stolee
2023-04-17 22:52 ` Taylor Blau
2023-04-17 16:21 ` [PATCH 4/4] fsck: validate .rev file header Derrick Stolee via GitGitGadget
2023-04-17 21:37 ` [PATCH 0/4] git fsck: check pack rev-index files Junio C Hamano
2023-04-18 15:23 ` Taylor Blau
2023-04-18 16:59 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqq1qkijhho.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=derrickstolee@github.com \
--cc=git@vger.kernel.org \
--cc=gitgitgadget@gmail.com \
--cc=me@ttaylorr.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.