Re: [PATCH] Disallow '\' in ref names
Robin Rosenberg venit, vidit, dixit 08.05.2009 07:32:
Show 18 quoted lines
> 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>
> ---
> Documentation/git-check-ref-format.txt | 2 ++
> refs.c | 3 ++-
> 2 files changed, 4 insertions(+), 1 deletions(-)
>
> diff --git a/Documentation/git-check-ref-format.txt b/Documentation/git-check-ref-format.txt
> index c1ce268..4884520 100644
> --- a/Documentation/git-check-ref-format.txt
> +++ b/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 `\\`Minor nit from the doc watch dog:
+. They cannot contain a `\\`.
Show 23 quoted lines
> +
> 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
> unquoted (by mistake), and also avoids ambiguities in certain
> diff --git a/refs.c b/refs.c
> index e65a3b4..fc33bc6 100644
> --- a/refs.c
> +++ b/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 ends with a "/".
> * - it ends with ".lock"
> + * - it contains a "\" (backslash)
> */
>
> static inline int bad_ref_char(int ch)
> {
> if (((unsigned) ch) <= ' ' ||
> - ch == '~' || ch == '^' || ch == ':')
> + ch == '~' || ch == '^' || ch == ':' || ch == '\\')
> return 1;
> /* 2.13 Pattern Matching Notation */
> if (ch == '?' || ch == '[') /* Unsupported */