Re: [PATCH v10 17/17] fsck: report invalid object type-path combinations
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Oct 1, 2021, 22:14 UTC
- Message-ID
- <xmqqk0iw2y0m.fsf@gitster.g>
- In-Reply-To
- <patch-v10-17.17-838df0a979b-20211001T091051Z-avarab@gmail.com>
Ævar Arnfjörð Bjarmason <avarab@gmail.com> writes:
Show 27 quoted lines
> diff --git a/builtin/fsck.c b/builtin/fsck.c
> index 260210bf8a1..30a516da29e 100644
> --- a/builtin/fsck.c
> +++ b/builtin/fsck.c
> @@ -615,12 +616,18 @@ static int fsck_loose(const struct object_id *oid, const char *path, void *data)
> oi.sizep = &size;
> oi.typep = &type;
>
> - if (read_loose_object(path, oid, &contents, &oi) < 0)
> - err = error(_("%s: object corrupt or missing: %s"),
> - oid_to_hex(oid), path);
> + if (read_loose_object(path, oid, &real_oid, &contents, &oi) < 0) {
> + if (contents && !oideq(&real_oid, oid))
> + err = error(_("%s: hash-path mismatch, found at: %s"),
> + oid_to_hex(&real_oid), path);
> + else
> + err = error(_("%s: object corrupt or missing: %s"),
> + oid_to_hex(oid), path);
> + }
> if (type != OBJ_NONE && type < 0)
> err = error(_("%s: object is of unknown type '%s': %s"),
> - oid_to_hex(oid), cb_data->obj_type.buf, path);
> + oid_to_hex(&real_oid), cb_data->obj_type.buf,
> + path);
> if (err < 0) {
> errors_found |= ERROR_OBJECT;
> return 0; /* keep checking other objects */When we say "hash-path mismatch", we would have non-null contents, presumably obtained from read_loose_object(). err is made negative when we give that messge, and we come here to return. Did we forget to free "contents" in that case?