@matheusbsbs / matheus-bagliano / commits / da915939fd
Fork 0

builtin-apply.c: fix the --- and +++ header filename consistency check

gitdiff_verify_name() only did a filename prefix check because of an off-by-one error. Signed-off-by: Andreas Gruenbacher <agruen@suse.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Andreas Gruenbacher committed Jan 18, 2010 at 22:37 UTC da915939fd7523cd145ba280cc974d46aa792331
2 files changed +39 -1
builtin-apply.c
+1 -1
@@ -686,7 +686,7 @@ static char *gitdiff_verify_name(const char *line, int isnull, char *orig_name,
686 if (isnull)
687 die("git apply: bad git-diff - expected /dev/null, got %s on line %d", name, linenr);
688 another = find_name(line, NULL, p_value, TERM_TAB);
689 - if (!another || memcmp(another, name, len))
689 + if (!another || memcmp(another, name, len + 1))
690 die("git apply: bad git-diff - inconsistent %s filename on line %d", oldnew, linenr);
691 free(another);
692 return orig_name;
t/t4133-apply-filenames.sh new
+38
@@ -0,0 +1,38 @@
1 +#!/bin/sh
2 +#
3 +# Copyright (c) 2010 Andreas Gruenbacher
4 +#
5 +
6 +test_description='git apply filename consistency check'
7 +
8 +. ./test-lib.sh
9 +
10 +test_expect_success setup '
11 + cat > bad1.patch <<EOF
12 +diff --git a/f b/f
13 +new file mode 100644
14 +index 0000000..d00491f
15 +--- /dev/null
16 ++++ b/f-blah
17 +@@ -0,0 +1 @@
18 ++1
19 +EOF
20 + cat > bad2.patch <<EOF
21 +diff --git a/f b/f
22 +deleted file mode 100644
23 +index d00491f..0000000
24 +--- b/f-blah
25 ++++ /dev/null
26 +@@ -1 +0,0 @@
27 +-1
28 +EOF
29 +'
30 +
31 +test_expect_success 'apply diff with inconsistent filenames in headers' '
32 + test_must_fail git apply bad1.patch 2>err
33 + grep "inconsistent new filename" err
34 + test_must_fail git apply bad2.patch 2>err
35 + grep "inconsistent old filename" err
36 +'
37 +
38 +test_done