From: Junio C Hamano Date: Fri, 21 Oct 2011 17:49:24 +0000 (-0700) Subject: Merge branch 'jm/maint-apply-detects-corrupt-patch-header' into maint X-Git-Tag: v1.7.7.1~9 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/cec3e186f7b76cdced54286ef1da42b6978c4c8d?hp=df6840855d24c2f54c0b8a66cbac33d8af43333a Merge branch 'jm/maint-apply-detects-corrupt-patch-header' into maint * jm/maint-apply-detects-corrupt-patch-header: fix "git apply --index ..." not to deref NULL --- diff --git a/builtin/apply.c b/builtin/apply.c index f2edc52818..aaa39fe17e 100644 --- a/builtin/apply.c +++ b/builtin/apply.c @@ -1407,6 +1407,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; diff --git a/t/t4254-am-corrupt.sh b/t/t4254-am-corrupt.sh new file mode 100755 index 0000000000..b7da95fac5 --- /dev/null +++ b/t/t4254-am-corrupt.sh @@ -0,0 +1,43 @@ +#!/bin/sh + +test_description='git am with corrupt input' +. ./test-lib.sh + +# Note the missing "+++" line: +cat > bad-patch.diff <<'EOF' +From: A U Thor +diff --git a/f b/f +index 7898192..6178079 100644 +--- a/f +@@ -1 +1 @@ +-a ++b +EOF + +test_expect_success setup ' + test $? = 0 && + echo a > f && + git add f && + test_tick && + git commit -m initial +' + +# This used to fail before, too, but with a different diagnostic. +# fatal: unable to write file '(null)' mode 100644: Bad address +# Also, it had the unwanted side-effect of deleting f. +test_expect_success 'try to apply corrupted patch' ' + git am bad-patch.diff 2> actual + test $? = 1 +' + +cat > expected <