summaryrefslogtreecommitdiff
path: root/builtin/apply.c
diff options
context:
space:
mode:
authorLibravatar Jim Meyering <jim@meyering.net>2011-10-12 16:33:54 +0200
committerLibravatar Junio C Hamano <gitster@pobox.com>2011-10-12 12:08:11 -0700
commit2c93286ab2ca5271e26779ffd1ecfd1c7a082a41 (patch)
treeff4f06df6e607c8e11a4857737aa2331713d6492 /builtin/apply.c
parentGit 1.7.4 (diff)
downloadtgif-2c93286ab2ca5271e26779ffd1ecfd1c7a082a41.tar.xz
fix "git apply --index ..." not to deref NULL
I noticed this when "git am CORRUPTED" unexpectedly failed with an odd diagnostic, and even removed one of the files it was supposed to have patched. Reproduce with any valid old/new patch from which you have removed the "+++ b/FILE" line. You'll see a diagnostic like this fatal: unable to write file '(null)' mode 100644: Bad address and you'll find that FILE has been removed. The above is on glibc-based systems. On other systems, rather than getting "null", you may provoke a segfault as git tries to dereference the NULL file name. Signed-off-by: Jim Meyering <meyering@redhat.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin/apply.c')
-rw-r--r--builtin/apply.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/builtin/apply.c b/builtin/apply.c
index 14951daedf..97ade776f3 100644
--- a/builtin/apply.c
+++ b/builtin/apply.c
@@ -1405,6 +1405,9 @@ static int find_header(char *line, unsigned long size, int *hdrsize, struct patc
"%d leading pathname components (line %d)" , p_value, linenr);
patch->old_name = patch->new_name = patch->def_name;
}
+ if (!patch->is_delete && !patch->new_name)
+ die("git diff header lacks filename information "
+ "(line %d)", linenr);
patch->is_toplevel_relative = 1;
*hdrsize = git_hdr_len;
return offset;