builtin-apply.c: fix the --- and +++ header filename consistency check
authorAndreas Gruenbacher <agruen@suse.de>
Mon, 18 Jan 2010 21:37:38 +0000 (22:37 +0100)
committerJunio C Hamano <gitster@pobox.com>
Tue, 19 Jan 2010 01:08:59 +0000 (17:08 -0800)
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>
builtin-apply.c
t/t4133-apply-filenames.sh [new file with mode: 0755]

index 36e2f9dda5c85c346e31f45afa6d28b107679970..8ca86f66c8e9bf55f99d5bb7e4d56913e1f74023 100644 (file)
@@ -686,7 +686,7 @@ static char *gitdiff_verify_name(const char *line, int isnull, char *orig_name,
                if (isnull)
                        die("git apply: bad git-diff - expected /dev/null, got %s on line %d", name, linenr);
                another = find_name(line, NULL, p_value, TERM_TAB);
-               if (!another || memcmp(another, name, len))
+               if (!another || memcmp(another, name, len + 1))
                        die("git apply: bad git-diff - inconsistent %s filename on line %d", oldnew, linenr);
                free(another);
                return orig_name;
diff --git a/t/t4133-apply-filenames.sh b/t/t4133-apply-filenames.sh
new file mode 100755 (executable)
index 0000000..3421807
--- /dev/null
@@ -0,0 +1,38 @@
+#!/bin/sh
+#
+# Copyright (c) 2010 Andreas Gruenbacher
+#
+
+test_description='git apply filename consistency check'
+
+. ./test-lib.sh
+
+test_expect_success setup '
+       cat > bad1.patch <<EOF
+diff --git a/f b/f
+new file mode 100644
+index 0000000..d00491f
+--- /dev/null
++++ b/f-blah
+@@ -0,0 +1 @@
++1
+EOF
+       cat > bad2.patch <<EOF
+diff --git a/f b/f
+deleted file mode 100644
+index d00491f..0000000
+--- b/f-blah
++++ /dev/null
+@@ -1 +0,0 @@
+-1
+EOF
+'
+
+test_expect_success 'apply diff with inconsistent filenames in headers' '
+       test_must_fail git apply bad1.patch 2>err
+       grep "inconsistent new filename" err
+       test_must_fail git apply bad2.patch 2>err
+       grep "inconsistent old filename" err
+'
+
+test_done