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
Родитель 5eb3d94553 a4c2e69936
Коммит e05aae684d
2 изменённых файлов: 4 добавлений и 1 удалений

Просмотреть файл

@ -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
Просмотреть файл

@ -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 */