builtin-apply.c: fix the --- and +++ header filename consistency check
From: Andreas Gruenbacher <hidden>
Date: 2016-06-15 22:48:03
Subsystem:
the rest · Maintainer:
Linus Torvalds
gitdiff_verify_name() only did a filename prefix check because of an off-by-one error. Signed-off-by: Andreas Gruenbacher <redacted> --- builtin-apply.c | 2 +- t/t4133-apply-filenames.sh | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletions(-) create mode 100755 t/t4133-apply-filenames.sh
diff --git a/builtin-apply.c b/builtin-apply.c
index 541493e..c8be66e 100644
--- a/builtin-apply.c
+++ b/builtin-apply.c@@ -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
index 0000000..3421807
--- /dev/null
+++ b/t/t4133-apply-filenames.sh@@ -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
--
1.6.6.243.gff6d2