]> git.ipfire.org Git - thirdparty/git.git/commit - builtin/fsck.c
fsck: check HAS_OBJ more consistently
authorJeff King <peff@peff.net>
Mon, 16 Jan 2017 21:34:57 +0000 (16:34 -0500)
committerJunio C Hamano <gitster@pobox.com>
Tue, 17 Jan 2017 22:24:33 +0000 (14:24 -0800)
commitc2d17b3b6ef42b20b9da294a7a920491b907c503
tree36aeb7228b92755873ea888c8abf8299e92eb92a
parentc3271a0e4715eb9c3f03dde4fdda23f50cc176c3
fsck: check HAS_OBJ more consistently

There are two spots that call lookup_object() and assume
that a non-NULL result means we have the object:

  1. When we're checking the objects given to us by the user
     on the command line.

  2. When we're checking if a reflog entry is valid.

This generally follows fsck's mental model that we will have
looked at and loaded a "struct object" for each object in
the repository. But it misses one case: if another object
_mentioned_ an object, but we didn't actually parse it or
verify that it exists, it will still have a struct.

It's not clear if this is a triggerable bug or not.
Certainly the later parts of the reachability check need to
be careful of this, and do so by checking the HAS_OBJ flag.
But both of these steps happen before we start traversing,
so probably we won't have followed any links yet. Still,
it's easy enough to be defensive here.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/fsck.c