Skip to content

Commit

Permalink
Forbid pattern maching characters in refnames.
Browse files Browse the repository at this point in the history
by marking '?', '*', and '[' as bad_ref_char().

Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Junio C Hamano committed Dec 17, 2005
1 parent 3ae854c commit 6828399
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 4 deletions.
8 changes: 5 additions & 3 deletions Documentation/git-check-ref-format.txt
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,15 @@ imposes the following rules on how refs are named:

. It cannot have ASCII control character (i.e. bytes whose
values are lower than \040, or \177 `DEL`), space, tilde `~`,
caret `{caret}`, or colon `:` anywhere;
caret `{caret}`, colon `:`, question-mark `?`, asterisk `*`,
or open bracket `[` anywhere;

. It cannot end with a slash `/`.

These rules makes it easy for shell script based tools to parse
refnames, and also avoids ambiguities in certain refname
expressions (see gitlink:git-rev-parse[1]). Namely:
refnames, pathname expansion by the shell when a refname is used
unquoted (by mistake), and also avoids ambiguities in certain
refname expressions (see gitlink:git-rev-parse[1]). Namely:

. double-dot `..` are often used as in `ref1..ref2`, and in some
context this notation means `{caret}ref1 ref2` (i.e. not in
Expand Down
4 changes: 3 additions & 1 deletion refs.c
Original file line number Diff line number Diff line change
Expand Up @@ -313,7 +313,9 @@ int write_ref_sha1(const char *ref, int fd, const unsigned char *sha1)
static inline int bad_ref_char(int ch)
{
return (((unsigned) ch) <= ' ' ||
ch == '~' || ch == '^' || ch == ':');
ch == '~' || ch == '^' || ch == ':' ||
/* 2.13 Pattern Matching Notation */
ch == '?' || ch == '*' || ch == '[');
}

int check_ref_format(const char *ref)
Expand Down

0 comments on commit 6828399

Please sign in to comment.