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