Re: [PATCH 3/4] fsck: check rev-index position values
- From
Taylor Blau <me@ttaylorr.com>
- Date
- Apr 17, 2023, 22:52 UTC
- Message-ID
- <ZD3NscowbkXizxCv@nand.local>
- In-Reply-To
- <adbe9c8ee90e087e864bd9e0c67338974b5dbc8d.1681748502.git.gitgitgadget@gmail.com>
On Mon, Apr 17, 2023 at 04:21:40PM +0000, Derrick Stolee via GitGitGadget wrote:
Show 12 quoted lines
> + 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;Very clever.
I thought about it for a while, and I am pretty confident that this is the cleanest you can get this loop to be. You could do something like building the forward index out of inverting the values in the .rev file, but everything I came up with based on that ended up being circular and not demonstrating anything interesting at all.
Thanks, Taylor