Browse Source

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 16 years ago committed by Junio C Hamano
parent
commit
a4c2e69936
  1. 2
      Documentation/git-check-ref-format.txt
  2. 3
      refs.c

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

Loading…
Cancel
Save