You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.4 KiB
62 lines
1.4 KiB
#!/bin/sh |
|
|
|
test_description='check that read-tree rejects confusing paths' |
|
. ./test-lib.sh |
|
|
|
test_expect_success 'create base tree' ' |
|
echo content >file && |
|
git add file && |
|
git commit -m base && |
|
blob=$(git rev-parse HEAD:file) && |
|
tree=$(git rev-parse HEAD^{tree}) |
|
' |
|
|
|
test_expect_success 'enable core.protectHFS for rejection tests' ' |
|
git config core.protectHFS true |
|
' |
|
|
|
test_expect_success 'enable core.protectNTFS for rejection tests' ' |
|
git config core.protectNTFS true |
|
' |
|
|
|
while read path pretty; do |
|
: ${pretty:=$path} |
|
case "$path" in |
|
*SPACE) |
|
path="${path%SPACE} " |
|
;; |
|
esac |
|
test_expect_success "reject $pretty at end of path" ' |
|
printf "100644 blob %s\t%s" "$blob" "$path" >tree && |
|
bogus=$(git mktree <tree) && |
|
test_must_fail git read-tree $bogus |
|
' |
|
|
|
test_expect_success "reject $pretty as subtree" ' |
|
printf "040000 tree %s\t%s" "$tree" "$path" >tree && |
|
bogus=$(git mktree <tree) && |
|
test_must_fail git read-tree $bogus |
|
' |
|
done <<-EOF |
|
. |
|
.. |
|
.git |
|
.GIT |
|
${u200c}.Git {u200c}.Git |
|
.gI${u200c}T .gI{u200c}T |
|
.GiT${u200c} .GiT{u200c} |
|
git~1 |
|
.git.SPACE .git.{space} |
|
.\\\\.GIT\\\\foobar backslashes |
|
.git\\\\foobar backslashes2 |
|
EOF |
|
|
|
test_expect_success 'utf-8 paths allowed with core.protectHFS off' ' |
|
test_when_finished "git read-tree HEAD" && |
|
test_config core.protectHFS false && |
|
printf "100644 blob %s\t%s" "$blob" ".gi${u200c}t" >tree && |
|
ok=$(git mktree <tree) && |
|
git read-tree $ok |
|
' |
|
|
|
test_done
|
|
|