commit-graph.c: handle corrupt/missing trees
authorTaylor Blau <me@ttaylorr.com>
Thu, 5 Sep 2019 22:04:57 +0000 (18:04 -0400)
committerJunio C Hamano <gitster@pobox.com>
Mon, 9 Sep 2019 17:55:59 +0000 (10:55 -0700)
commit806278dead57766bf000af62dcb8892ee3a24956
treeb8b3c92ff86935c84553f5f1d035d881df65cac6
parent16749b8dd2cd2d3ab693ac7ebe110e57cf054005
commit-graph.c: handle corrupt/missing trees

Apply similar treatment as in the previous commit to handle an unchecked
call to 'get_commit_tree_oid()'. Previously, a NULL return value from
this function would be immediately dereferenced with '->hash', and then
cause a segfault.

Before dereferencing to access the 'hash' member, check the return value
of 'get_commit_tree_oid()' to make sure that it is not NULL.

To make this check correct, a related change is also needed in
'commit.c', which is to check the return value of 'get_commit_tree'
before taking its address. If 'get_commit_tree' returns NULL, we
encounter an undefined behavior when taking the address of the return
value of 'get_commit_tree' and then taking '->object.oid'. (On my system,
this is memory address 0x8, which is obviously wrong).

Fix this by making sure that 'get_commit_tree' returns something
non-NULL before digging through a structure that is not there, thus
preventing a segfault down the line in the commit graph code.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
commit-graph.c
commit.c
t/t5318-commit-graph.sh