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
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
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 |
Computing file changes ...