summaryrefslogtreecommitdiff
path: root/refs.c
diff options
context:
space:
mode:
authorRobin Rosenberg <robin.rosenberg@dewire.com>2009-05-08 05:32:37 (GMT)
committerJunio C Hamano <gitster@pobox.com>2009-05-09 08:35:49 (GMT)
commita4c2e69936df8dd0b071b85664c6cc6a4870dd84 (patch)
tree45483a8bdac09aa9d018908ae21dca603aa9e890 /refs.c
parentf01f1099f40f24fe6f7802185340a6fa3a3d4f35 (diff)
downloadgit-a4c2e69936df8dd0b071b85664c6cc6a4870dd84.zip
git-a4c2e69936df8dd0b071b85664c6cc6a4870dd84.tar.gz
git-a4c2e69936df8dd0b071b85664c6cc6a4870dd84.tar.bz2
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>
Diffstat (limited to 'refs.c')
-rw-r--r--refs.c3
1 files changed, 2 insertions, 1 deletions
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 */