summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2014-11-24 13:37:56 -0500
committerJunio C Hamano <gitster@pobox.com>2014-12-17 11:00:37 -0800
commit96b50cc19003d54f5962d65597c94e2c52eb22e7 (patch)
tree6361ef36955ea7791d42e125275b7d3757f9e0ed
parent4616918013bf4fb3ce61175702d963a1fdd87f84 (diff)
downloadgit-96b50cc19003d54f5962d65597c94e2c52eb22e7.tar.gz
read-tree: add tests for confusing paths like ".." and ".git"
We should prevent nonsense paths from entering the index in the first place, as they can cause confusing results if they are ever checked out into the working tree. We already do so, but we never tested it. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rwxr-xr-xt/t1014-read-tree-confusing.sh32
1 files changed, 32 insertions, 0 deletions
diff --git a/t/t1014-read-tree-confusing.sh b/t/t1014-read-tree-confusing.sh
new file mode 100755
index 0000000000..7b31d53196
--- /dev/null
+++ b/t/t1014-read-tree-confusing.sh
@@ -0,0 +1,32 @@
+#!/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})
+'
+
+while read path; do
+ test_expect_success "reject $path 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 $path 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
+EOF
+
+test_done