[PATCH] Disallow '\' in ref names
From: Robin Rosenberg <hidden>
Date: 2016-06-15 22:46:43
Subsystem:
documentation, the rest · Maintainers:
Jonathan Corbet, Linus Torvalds
This is asking for trouble since '\' is a directory separator in Windows and thus may produce unpredictable results. Signed-off-by: Robin Rosenberg <redacted> --- Documentation/git-check-ref-format.txt | 2 ++ refs.c | 3 ++- 2 files changed, 4 insertions(+), 1 deletions(-)
diff --git a/Documentation/git-check-ref-format.txt b/Documentation/git-check-ref-format.txt
index c1ce268..4884520 100644
--- a/Documentation/git-check-ref-format.txt
+++ b/Documentation/git-check-ref-format.txt@@ -38,6 +38,8 @@ imposes the following rules on how references are named: . They cannot contain a sequence `@{`. +- They cannot contain a `\\` + These rules make it easy for shell script based tools to parse reference names, pathname expansion by the shell when a reference name is used unquoted (by mistake), and also avoids ambiguities in certain
diff --git a/refs.c b/refs.c
index e65a3b4..fc33bc6 100644
--- a/refs.c
+++ b/refs.c@@ -682,12 +682,13 @@ int for_each_rawref(each_ref_fn fn, void *cb_data) * - it has ASCII control character, "~", "^", ":" or SP, anywhere, or * - it ends with a "/". * - it ends with ".lock" + * - it contains a "\" (backslash) */ static inline int bad_ref_char(int ch) { if (((unsigned) ch) <= ' ' || - ch == '~' || ch == '^' || ch == ':') + ch == '~' || ch == '^' || ch == ':' || ch == '\\') return 1; /* 2.13 Pattern Matching Notation */ if (ch == '?' || ch == '[') /* Unsupported */
--
1.6.3.dirty