Disallow '\' in ref names

This is asking for trouble since '\' is a directory separator in
Windows and thus may produce unpredictable results.

Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Robin Rosenberg 2009-05-08 07:32:37 +02:00 committed by Junio C Hamano
parent f01f1099f4
commit a4c2e69936
2 changed files with 4 additions and 1 deletions

View File

@ -38,6 +38,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 */