[PATCH 1/1] apply.c: reject patch without --(ex,in)clude and path outside.
From: Bruce E. Robertson <hidden>
Date: 2016-06-15 22:52:27
Subsystem:
the rest · Maintainer:
Linus Torvalds
From: "Bruce E. Robertson" <redacted> Patches are silently ignored when applied with neither --include nor --exclude options when the current working dir is not on patch's path. This contravenes the principle of least surprise. "make test" results for this change: fixed 0 success 8032 failed 0 broken 58 total 8126 Signed-off-by: Bruce E. Robertson <redacted> --- builtin/apply.c | 12 +++++++++--- 1 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/builtin/apply.c b/builtin/apply.c
index 84a8a0b..162e2aa 100644
--- a/builtin/apply.c
+++ b/builtin/apply.c@@ -3619,6 +3619,7 @@ static struct lock_file lock_file; static struct string_list limit_by_name; static int has_include; +static int has_exclude; static void add_name_limit(const char *name, int exclude) { struct string_list_item *it;
@@ -3717,9 +3718,13 @@ static int apply_patch(int fd, const char *filename, int options) listp = &patch->next; } else { - /* perhaps free it a bit better? */ - free(patch); - skipped_patch++; + if ( !has_exclude && !has_include ) { + patch->rejected = 1; + } else { + /* perhaps free it a bit better? */ + free(patch); + skipped_patch++; + } } offset += nr; }
@@ -3773,6 +3778,7 @@ static int option_parse_exclude(const struct option *opt, const char *arg, int unset) { add_name_limit(arg, 1); + has_exclude = 1; return 0; }
--
1.7.7.1.432.gca458.dirty