diff options
author | Jim Meyering <jim@meyering.net> | 2011-10-12 16:33:54 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-10-12 12:08:11 -0700 |
commit | 2c93286ab2ca5271e26779ffd1ecfd1c7a082a41 (patch) | |
tree | ff4f06df6e607c8e11a4857737aa2331713d6492 /builtin | |
parent | Git 1.7.4 (diff) | |
download | tgif-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')
-rw-r--r-- | builtin/apply.c | 3 |
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; |