From 2c93286ab2ca5271e26779ffd1ecfd1c7a082a41 Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Wed, 12 Oct 2011 16:33:54 +0200 Subject: 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 Signed-off-by: Junio C Hamano --- builtin/apply.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'builtin/apply.c') 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; -- cgit v1.2.3