Don't segfault if we failed to inflate a packed delta
authorShawn O. Pearce <spearce@spearce.org>
Sat, 25 Aug 2007 07:26:04 +0000 (03:26 -0400)
committerJunio C Hamano <gitster@pobox.com>
Sat, 25 Aug 2007 15:33:47 +0000 (08:33 -0700)
commit9064d87b06f3d0b4ca0aabb45770eefb84fc3ca2
treedaa048a8d20f04f33ba52e38d14351c22477c978
parent2e3404c3245e1e0031ef0a6574f25e8c35d5aac3
Don't segfault if we failed to inflate a packed delta

Under some types of packfile corruption the zlib stream holding the
data for a delta within a packfile may fail to inflate, due to say
a CRC failure within the compressed data itself.  When this occurs
the unpack_compressed_entry function will return NULL as a signal to
the caller that the data is not available.  Unfortunately we then
tried to use that NULL as though it referenced a memory location
where a delta was stored and tried to apply it to the delta base.
Loading a byte from the NULL address typically causes a SIGSEGV.

cate on #git noticed this failure in `git fsck --full` where the
call to verify_pack() first noticed that the packfile was corrupt
by finding that the packfile's SHA-1 did not match the raw data of
the file.  After finding this fsck went ahead and tried to verify
every object within the packfile, even though the packfile was
already known to be bad.  If we are going to shovel bad data at
the delta unpacking code, we better handle it correctly.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
sha1_file.c