Merge branch 'rr/forbid-bs-in-ref'

* rr/forbid-bs-in-ref:
  Disallow '\' in ref names
This commit is contained in:
Junio C Hamano 2009-05-23 01:39:45 -07:00
commit e05aae684d
2 changed files with 4 additions and 1 deletions

View File

@ -42,6 +42,8 @@ imposes the following rules on how references are named:
. They cannot contain a sequence `@{`. . They cannot contain a sequence `@{`.
- They cannot contain a `\\`.
These rules make it easy for shell script based tools to parse 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 reference names, pathname expansion by the shell when a reference name is used
unquoted (by mistake), and also avoids ambiguities in certain unquoted (by mistake), and also avoids ambiguities in certain

3
refs.c
View File

@ -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 has ASCII control character, "~", "^", ":" or SP, anywhere, or
* - it ends with a "/". * - it ends with a "/".
* - it ends with ".lock" * - it ends with ".lock"
* - it contains a "\" (backslash)
*/ */
static inline int bad_ref_char(int ch) static inline int bad_ref_char(int ch)
{ {
if (((unsigned) ch) <= ' ' || if (((unsigned) ch) <= ' ' ||
ch == '~' || ch == '^' || ch == ':') ch == '~' || ch == '^' || ch == ':' || ch == '\\')
return 1; return 1;
/* 2.13 Pattern Matching Notation */ /* 2.13 Pattern Matching Notation */
if (ch == '?' || ch == '[') /* Unsupported */ if (ch == '?' || ch == '[') /* Unsupported */