summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2014-11-24 13:39:12 -0500
committerJunio C Hamano <gitster@pobox.com>2014-12-17 11:04:31 -0800
commitcc2fc7c2f07c4a2aba5a653137ac9b489e05df43 (patch)
tree4fb35f12f8ecc901f4e5509264fdd6f855373bb7
parent96b50cc19003d54f5962d65597c94e2c52eb22e7 (diff)
downloadgit-cc2fc7c2f07c4a2aba5a653137ac9b489e05df43.tar.gz
verify_dotfile(): reject .git case-insensitively
We do not allow ".git" to enter into the index as a path component, because checking out the result to the working tree may causes confusion for subsequent git commands. However, on case-insensitive file systems, ".Git" or ".GIT" is the same. We should catch and prevent those, too. Note that technically we could allow this for repos on case-sensitive filesystems. But there's not much point. It's unlikely that anybody cares, and it creates a repository that is unexpectedly non-portable to other systems. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--read-cache.c5
-rwxr-xr-xt/t1014-read-tree-confusing.sh1
2 files changed, 4 insertions, 2 deletions
diff --git a/read-cache.c b/read-cache.c
index 33dd676ccb..122be494f3 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -759,9 +759,10 @@ static int verify_dotfile(const char *rest)
* shares the path end test with the ".." case.
*/
case 'g':
- if (rest[1] != 'i')
+ case 'G':
+ if (rest[1] != 'i' && rest[1] != 'I')
break;
- if (rest[2] != 't')
+ if (rest[2] != 't' && rest[2] != 'T')
break;
rest += 2;
/* fallthrough */
diff --git a/t/t1014-read-tree-confusing.sh b/t/t1014-read-tree-confusing.sh
index 7b31d53196..eff8aedf7a 100755
--- a/t/t1014-read-tree-confusing.sh
+++ b/t/t1014-read-tree-confusing.sh
@@ -27,6 +27,7 @@ done <<-\EOF
.
..
.git
+.GIT
EOF
test_done