Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2009-05-23 12:39:45 +0400
committerJunio C Hamano <gitster@pobox.com>2009-05-23 12:39:45 +0400
commite05aae684d453695bc5bd1e66aa96bc7d42e186a (patch)
tree6e4e87717266383da704063fca3e9db42c081b23
parent5eb3d945539ece1f305669688ffb981f38bb4337 (diff)
parenta4c2e69936df8dd0b071b85664c6cc6a4870dd84 (diff)
Merge branch 'rr/forbid-bs-in-ref'
* rr/forbid-bs-in-ref: Disallow '\' in ref names
-rw-r--r--Documentation/git-check-ref-format.txt2
-rw-r--r--refs.c3
2 files changed, 4 insertions, 1 deletions
diff --git a/Documentation/git-check-ref-format.txt b/Documentation/git-check-ref-format.txt
index 0873e60f7f..0b7982ea76 100644
--- a/Documentation/git-check-ref-format.txt
+++ b/Documentation/git-check-ref-format.txt
@@ -42,6 +42,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 2b1f0f0e6e..bb4bdc9eac 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 */