зеркало из https://github.com/microsoft/git.git
Forbid pattern maching characters in refnames.
by marking '?', '*', and '[' as bad_ref_char(). Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Родитель
3ae854c356
Коммит
68283999f8
|
@ -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
|
||||
|
|
4
refs.c
4
refs.c
|
@ -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)
|
||||
|
|
Загрузка…
Ссылка в новой задаче