https://github.com/git/git
Revision 9064d87b06f3d0b4ca0aabb45770eefb84fc3ca2 authored by Shawn O. Pearce on 25 August 2007, 07:26:04 UTC, committed by Junio C Hamano on 25 August 2007, 15:33:47 UTC
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>
1 parent 2e3404c
History
Tip revision: 9064d87b06f3d0b4ca0aabb45770eefb84fc3ca2 authored by Shawn O. Pearce on 25 August 2007, 07:26:04 UTC
Don't segfault if we failed to inflate a packed delta
Tip revision: 9064d87
File Mode Size
Documentation
arm
compat
contrib
git-gui
gitweb
mozilla-sha1
perl
ppc
t
templates
xdiff
.gitignore -rw-r--r-- 2.3 KB
.mailmap -rw-r--r-- 1.9 KB
COPYING -rw-r--r-- 18.3 KB
GIT-VERSION-GEN -rwxr-xr-x 757 bytes
INSTALL -rw-r--r-- 4.6 KB
Makefile -rw-r--r-- 31.4 KB
README -rw-r--r-- 2.1 KB
RelNotes l--------- 32 bytes
alloc.c -rw-r--r-- 1.7 KB
archive-tar.c -rw-r--r-- 8.2 KB
archive-zip.c -rw-r--r-- 8.9 KB
archive.h -rw-r--r-- 1.1 KB
attr.c -rw-r--r-- 14.6 KB
attr.h -rw-r--r-- 816 bytes
base85.c -rw-r--r-- 2.9 KB
blob.c -rw-r--r-- 1.1 KB
blob.h -rw-r--r-- 311 bytes
builtin-add.c -rw-r--r-- 6.1 KB
builtin-annotate.c -rw-r--r-- 446 bytes
builtin-apply.c -rw-r--r-- 71.0 KB
builtin-archive.c -rw-r--r-- 5.7 KB
builtin-blame.c -rw-r--r-- 61.2 KB
builtin-branch.c -rw-r--r-- 14.9 KB
builtin-bundle.c -rw-r--r-- 10.8 KB
builtin-cat-file.c -rw-r--r-- 3.4 KB
builtin-check-attr.c -rw-r--r-- 1.4 KB
builtin-check-ref-format.c -rw-r--r-- 282 bytes
builtin-checkout-index.c -rw-r--r-- 7.5 KB
builtin-commit-tree.c -rw-r--r-- 3.9 KB
builtin-config.c -rw-r--r-- 7.2 KB
builtin-count-objects.c -rw-r--r-- 2.9 KB
builtin-describe.c -rw-r--r-- 7.0 KB
builtin-diff-files.c -rw-r--r-- 958 bytes
builtin-diff-index.c -rw-r--r-- 1.2 KB
builtin-diff-tree.c -rw-r--r-- 3.3 KB
builtin-diff.c -rw-r--r-- 8.7 KB
builtin-fetch--tool.c -rw-r--r-- 12.8 KB
builtin-fmt-merge-msg.c -rw-r--r-- 7.8 KB
builtin-for-each-ref.c -rw-r--r-- 20.6 KB
builtin-fsck.c -rw-r--r-- 18.3 KB
builtin-gc.c -rw-r--r-- 2.5 KB
builtin-grep.c -rw-r--r-- 16.4 KB
builtin-init-db.c -rw-r--r-- 9.4 KB
builtin-log.c -rw-r--r-- 19.5 KB
builtin-ls-files.c -rw-r--r-- 12.1 KB
builtin-ls-tree.c -rw-r--r-- 4.4 KB
builtin-mailinfo.c -rw-r--r-- 19.1 KB
builtin-mailsplit.c -rw-r--r-- 5.8 KB
builtin-merge-base.c -rw-r--r-- 1.2 KB
builtin-merge-file.c -rw-r--r-- 1.6 KB
builtin-mv.c -rw-r--r-- 7.4 KB
builtin-name-rev.c -rw-r--r-- 6.4 KB
builtin-pack-objects.c -rw-r--r-- 47.3 KB
builtin-pack-refs.c -rw-r--r-- 3.4 KB
builtin-prune-packed.c -rw-r--r-- 1.8 KB
builtin-prune.c -rw-r--r-- 1.9 KB
builtin-push.c -rw-r--r-- 3.9 KB
builtin-read-tree.c -rw-r--r-- 6.8 KB
builtin-reflog.c -rw-r--r-- 9.8 KB
builtin-rerere.c -rw-r--r-- 11.0 KB
builtin-rev-list.c -rw-r--r-- 12.8 KB
builtin-rev-parse.c -rw-r--r-- 8.2 KB
builtin-revert.c -rw-r--r-- 10.1 KB
builtin-rm.c -rw-r--r-- 6.3 KB
builtin-runstatus.c -rw-r--r-- 833 bytes
builtin-shortlog.c -rw-r--r-- 7.4 KB
builtin-show-branch.c -rw-r--r-- 21.1 KB
builtin-show-ref.c -rw-r--r-- 5.8 KB
builtin-stripspace.c -rw-r--r-- 2.0 KB
builtin-symbolic-ref.c -rw-r--r-- 1.3 KB
builtin-tag.c -rw-r--r-- 10.1 KB
builtin-tar-tree.c -rw-r--r-- 2.1 KB
builtin-unpack-objects.c -rw-r--r-- 8.6 KB
builtin-update-index.c -rw-r--r-- 19.2 KB
builtin-update-ref.c -rw-r--r-- 1.6 KB
builtin-upload-archive.c -rw-r--r-- 4.1 KB
builtin-verify-pack.c -rw-r--r-- 1.7 KB
builtin-verify-tag.c -rw-r--r-- 2.5 KB
builtin-write-tree.c -rw-r--r-- 2.2 KB
builtin.h -rw-r--r-- 5.7 KB
cache-tree.c -rw-r--r-- 12.5 KB
cache-tree.h -rw-r--r-- 921 bytes
cache.h -rw-r--r-- 21.2 KB
check-builtins.sh -rwxr-xr-x 588 bytes
check-racy.c -rw-r--r-- 517 bytes
color.c -rw-r--r-- 3.2 KB
color.h -rw-r--r-- 376 bytes
combine-diff.c -rw-r--r-- 26.4 KB
commit.c -rw-r--r-- 36.7 KB
commit.h -rw-r--r-- 3.8 KB
config.c -rw-r--r-- 22.6 KB
config.mak.in -rw-r--r-- 931 bytes
configure.ac -rw-r--r-- 12.4 KB
connect.c -rw-r--r-- 13.0 KB
convert-objects.c -rw-r--r-- 7.3 KB
convert.c -rw-r--r-- 14.9 KB
copy.c -rw-r--r-- 688 bytes
csum-file.c -rw-r--r-- 2.1 KB
csum-file.h -rw-r--r-- 515 bytes
ctype.c -rw-r--r-- 889 bytes
daemon.c -rw-r--r-- 26.7 KB
date.c -rw-r--r-- 18.0 KB
decorate.c -rw-r--r-- 1.8 KB
decorate.h -rw-r--r-- 382 bytes
delta.h -rw-r--r-- 3.4 KB
diff-delta.c -rw-r--r-- 13.6 KB
diff-lib.c -rw-r--r-- 17.1 KB
diff.c -rw-r--r-- 80.7 KB
diff.h -rw-r--r-- 7.1 KB
diffcore-break.c -rw-r--r-- 8.4 KB
diffcore-delta.c -rw-r--r-- 5.2 KB
diffcore-order.c -rw-r--r-- 2.2 KB
diffcore-pickaxe.c -rw-r--r-- 3.3 KB
diffcore-rename.c -rw-r--r-- 13.8 KB
diffcore.h -rw-r--r-- 3.8 KB
dir.c -rw-r--r-- 16.2 KB
dir.h -rw-r--r-- 1.9 KB
dump-cache-tree.c -rw-r--r-- 1.5 KB
entry.c -rw-r--r-- 5.7 KB
environment.c -rw-r--r-- 3.5 KB
exec_cmd.c -rw-r--r-- 2.8 KB
exec_cmd.h -rw-r--r-- 286 bytes
fast-import.c -rw-r--r-- 58.9 KB
fetch-pack.c -rw-r--r-- 17.6 KB
fetch.c -rw-r--r-- 6.7 KB
fetch.h -rw-r--r-- 1.6 KB
fixup-builtins -rwxr-xr-x 326 bytes
generate-cmdlist.sh -rwxr-xr-x 551 bytes
git-add--interactive.perl -rwxr-xr-x 16.0 KB
git-am.sh -rwxr-xr-x 11.1 KB
git-archimport.perl -rwxr-xr-x 35.8 KB
git-bisect.sh -rwxr-xr-x 8.3 KB
git-checkout.sh -rwxr-xr-x 6.7 KB
git-clean.sh -rwxr-xr-x 1.8 KB
git-clone.sh -rwxr-xr-x 11.2 KB
git-commit.sh -rwxr-xr-x 14.2 KB
git-compat-util.h -rw-r--r-- 8.2 KB
git-cvsexportcommit.perl -rwxr-xr-x 8.5 KB
git-cvsimport.perl -rwxr-xr-x 26.1 KB
git-cvsserver.perl -rwxr-xr-x 99.1 KB
git-fetch.sh -rwxr-xr-x 8.9 KB
git-filter-branch.sh -rwxr-xr-x 8.7 KB
git-instaweb.sh -rwxr-xr-x 5.1 KB
git-lost-found.sh -rwxr-xr-x 473 bytes
git-ls-remote.sh -rwxr-xr-x 2.5 KB
git-merge-octopus.sh -rwxr-xr-x 2.4 KB
git-merge-one-file.sh -rwxr-xr-x 3.3 KB
git-merge-ours.sh -rwxr-xr-x 335 bytes
git-merge-resolve.sh -rwxr-xr-x 956 bytes
git-merge-stupid.sh -rwxr-xr-x 1.4 KB
git-merge.sh -rwxr-xr-x 11.1 KB
git-mergetool.sh -rwxr-xr-x 8.4 KB
git-parse-remote.sh -rwxr-xr-x 5.8 KB
git-pull.sh -rwxr-xr-x 3.2 KB
git-quiltimport.sh -rwxr-xr-x 3.0 KB
git-rebase--interactive.sh -rwxr-xr-x 11.3 KB
git-rebase.sh -rwxr-xr-x 8.5 KB
git-relink.perl -rwxr-xr-x 4.0 KB
git-remote.perl -rwxr-xr-x 9.0 KB
git-repack.sh -rwxr-xr-x 2.8 KB
git-request-pull.sh -rwxr-xr-x 1.3 KB
git-reset.sh -rwxr-xr-x 2.3 KB
git-send-email.perl -rwxr-xr-x 18.1 KB
git-sh-setup.sh -rwxr-xr-x 2.9 KB
git-stash.sh -rwxr-xr-x 4.5 KB
git-submodule.sh -rwxr-xr-x 6.3 KB
git-svn.perl -rwxr-xr-x 115.1 KB
git-svnimport.perl -rwxr-xr-x 24.2 KB
git.c -rw-r--r-- 13.1 KB
git.spec.in -rw-r--r-- 8.0 KB
gitk -rwxr-xr-x 215.0 KB
grep.c -rw-r--r-- 12.7 KB
grep.h -rw-r--r-- 1.6 KB
hash-object.c -rw-r--r-- 1.9 KB
help.c -rw-r--r-- 4.6 KB
http-fetch.c -rw-r--r-- 25.9 KB
http-push.c -rw-r--r-- 66.5 KB
http.c -rw-r--r-- 11.4 KB
http.h -rw-r--r-- 2.5 KB
ident.c -rw-r--r-- 5.7 KB
imap-send.c -rw-r--r-- 28.5 KB
index-pack.c -rw-r--r-- 21.8 KB
interpolate.c -rw-r--r-- 2.0 KB
interpolate.h -rw-r--r-- 601 bytes
list-objects.c -rw-r--r-- 4.5 KB
list-objects.h -rw-r--r-- 382 bytes
local-fetch.c -rw-r--r-- 6.0 KB
lockfile.c -rw-r--r-- 4.4 KB
log-tree.c -rw-r--r-- 10.1 KB
log-tree.h -rw-r--r-- 386 bytes
mailmap.c -rw-r--r-- 2.2 KB
mailmap.h -rw-r--r-- 213 bytes
match-trees.c -rw-r--r-- 7.1 KB
merge-file.c -rw-r--r-- 2.4 KB
merge-index.c -rw-r--r-- 2.4 KB
merge-recursive.c -rw-r--r-- 44.4 KB
merge-tree.c -rw-r--r-- 7.9 KB
mktag.c -rw-r--r-- 3.7 KB
mktree.c -rw-r--r-- 3.1 KB
object-refs.c -rw-r--r-- 2.0 KB
object.c -rw-r--r-- 5.5 KB
object.h -rw-r--r-- 2.3 KB
pack-check.c -rw-r--r-- 5.1 KB
pack-redundant.c -rw-r--r-- 14.9 KB
pack-write.c -rw-r--r-- 4.7 KB
pack.h -rw-r--r-- 2.0 KB
pager.c -rw-r--r-- 1.2 KB
patch-delta.c -rw-r--r-- 2.2 KB
patch-id.c -rw-r--r-- 1.6 KB
patch-ids.c -rw-r--r-- 4.7 KB
patch-ids.h -rw-r--r-- 490 bytes
path-list.c -rw-r--r-- 2.3 KB
path-list.h -rw-r--r-- 596 bytes
path.c -rw-r--r-- 7.6 KB
peek-remote.c -rw-r--r-- 1.4 KB
pkt-line.c -rw-r--r-- 2.5 KB
pkt-line.h -rw-r--r-- 348 bytes
progress.c -rw-r--r-- 2.6 KB
progress.h -rw-r--r-- 605 bytes
quote.c -rw-r--r-- 8.0 KB
quote.h -rw-r--r-- 2.0 KB
reachable.c -rw-r--r-- 5.5 KB
reachable.h -rw-r--r-- 127 bytes
read-cache.c -rw-r--r-- 28.7 KB
receive-pack.c -rw-r--r-- 12.1 KB
reflog-walk.c -rw-r--r-- 6.7 KB
reflog-walk.h -rw-r--r-- 383 bytes
refs.c -rw-r--r-- 34.6 KB
refs.h -rw-r--r-- 2.4 KB
remote.c -rw-r--r-- 14.5 KB
remote.h -rw-r--r-- 1018 bytes
revision.c -rw-r--r-- 37.6 KB
revision.h -rw-r--r-- 3.1 KB
rsh.c -rw-r--r-- 1.7 KB
rsh.h -rw-r--r-- 158 bytes
run-command.c -rw-r--r-- 3.5 KB
run-command.h -rw-r--r-- 1.2 KB
send-pack.c -rw-r--r-- 10.2 KB
server-info.c -rw-r--r-- 5.2 KB
setup.c -rw-r--r-- 8.3 KB
sha1_file.c -rw-r--r-- 60.3 KB
sha1_name.c -rw-r--r-- 16.0 KB
shallow.c -rw-r--r-- 2.3 KB
shell.c -rw-r--r-- 1.1 KB
show-index.c -rw-r--r-- 2.1 KB
sideband.c -rw-r--r-- 1.9 KB
sideband.h -rw-r--r-- 335 bytes
ssh-fetch.c -rw-r--r-- 3.6 KB
ssh-pull.c -rw-r--r-- 154 bytes
ssh-push.c -rw-r--r-- 155 bytes
ssh-upload.c -rw-r--r-- 2.8 KB
strbuf.c -rw-r--r-- 767 bytes
strbuf.h -rw-r--r-- 216 bytes
symlinks.c -rw-r--r-- 862 bytes
tag.c -rw-r--r-- 2.8 KB
tag.h -rw-r--r-- 471 bytes
tar.h -rw-r--r-- 644 bytes
test-absolute-path.c -rw-r--r-- 147 bytes
test-chmtime.c -rw-r--r-- 1.2 KB
test-date.c -rw-r--r-- 378 bytes
test-delta.c -rw-r--r-- 1.8 KB
test-genrandom.c -rw-r--r-- 731 bytes
test-match-trees.c -rw-r--r-- 588 bytes
test-sha1.c -rw-r--r-- 815 bytes
test-sha1.sh -rwxr-xr-x 1.9 KB
trace.c -rw-r--r-- 3.9 KB
tree-diff.c -rw-r--r-- 10.8 KB
tree-walk.c -rw-r--r-- 4.3 KB
tree-walk.h -rw-r--r-- 1.2 KB
tree.c -rw-r--r-- 7.3 KB
tree.h -rw-r--r-- 860 bytes
unpack-file.c -rw-r--r-- 772 bytes
unpack-trees.c -rw-r--r-- 21.5 KB
unpack-trees.h -rw-r--r-- 940 bytes
update-server-info.c -rw-r--r-- 457 bytes
upload-pack.c -rw-r--r-- 16.3 KB
usage.c -rw-r--r-- 1.9 KB
utf8.c -rw-r--r-- 9.9 KB
utf8.h -rw-r--r-- 388 bytes
var.c -rw-r--r-- 1.3 KB
write_or_die.c -rw-r--r-- 2.3 KB
wt-status.c -rw-r--r-- 9.3 KB
wt-status.h -rw-r--r-- 566 bytes
xdiff-interface.c -rw-r--r-- 4.5 KB
xdiff-interface.h -rw-r--r-- 632 bytes

README

back to top