Commit 232bc89598947823e57431df63a5d6d41ad218c3

Edward Thomson 2015-01-14T13:15:34

checkout tests: nasty symlinks Symbolic links that abuse case insensitivity to write into .git.

diff --git a/tests/checkout/nasty.c b/tests/checkout/nasty.c
index c07d938..bc25a3b 100644
--- a/tests/checkout/nasty.c
+++ b/tests/checkout/nasty.c
@@ -23,7 +23,29 @@ void test_checkout_nasty__cleanup(void)
 	cl_git_sandbox_cleanup();
 }
 
-void test_checkout_fails(const char *refname, const char *filename)
+static void test_checkout_passes(const char *refname, const char *filename)
+{
+	git_oid commit_id;
+	git_commit *commit;
+	git_checkout_options opts = GIT_CHECKOUT_OPTIONS_INIT;
+	git_buf path = GIT_BUF_INIT;
+
+	cl_git_pass(git_buf_joinpath(&path, repo_name, filename));
+
+	cl_git_pass(git_reference_name_to_id(&commit_id, repo, refname));
+	cl_git_pass(git_commit_lookup(&commit, repo, &commit_id));
+
+	opts.checkout_strategy = GIT_CHECKOUT_FORCE |
+		GIT_CHECKOUT_DONT_UPDATE_INDEX;
+
+	cl_git_pass(git_checkout_tree(repo, (const git_object *)commit, &opts));
+	cl_assert(!git_path_exists(path.ptr));
+
+	git_commit_free(commit);
+	git_buf_free(&path);
+}
+
+static void test_checkout_fails(const char *refname, const char *filename)
 {
 	git_oid commit_id;
 	git_commit *commit;
@@ -323,3 +345,19 @@ void test_checkout_nasty__honors_core_protectntfs(void)
 	test_checkout_fails("refs/heads/dot_git_dot", ".git/foobar");
 	test_checkout_fails("refs/heads/git_tilde1", ".git/foobar");
 }
+
+void test_checkout_nasty__symlink1(void)
+{
+	test_checkout_passes("refs/heads/symlink1", ".git/foobar");
+}
+
+void test_checkout_nasty__symlink2(void)
+{
+	test_checkout_passes("refs/heads/symlink2", ".git/foobar");
+}
+
+void test_checkout_nasty__symlink3(void)
+{
+	test_checkout_passes("refs/heads/symlink3", ".git/foobar");
+}
+
diff --git a/tests/resources/nasty/.gitted/objects/14/e70ab559b4c6a8a6fc9b6f538bd1f3934be725 b/tests/resources/nasty/.gitted/objects/14/e70ab559b4c6a8a6fc9b6f538bd1f3934be725
new file mode 100644
index 0000000..371951a
Binary files /dev/null and b/tests/resources/nasty/.gitted/objects/14/e70ab559b4c6a8a6fc9b6f538bd1f3934be725 differ
diff --git a/tests/resources/nasty/.gitted/objects/19/1381ee74dec49c89f99a62d055cb1058ba0de9 b/tests/resources/nasty/.gitted/objects/19/1381ee74dec49c89f99a62d055cb1058ba0de9
new file mode 100644
index 0000000..f1619a2
Binary files /dev/null and b/tests/resources/nasty/.gitted/objects/19/1381ee74dec49c89f99a62d055cb1058ba0de9 differ
diff --git a/tests/resources/nasty/.gitted/objects/1b/31d55e0c53efbea6c670ece9057b76b5822eea b/tests/resources/nasty/.gitted/objects/1b/31d55e0c53efbea6c670ece9057b76b5822eea
deleted file mode 100644
index 20ede1b..0000000
--- a/tests/resources/nasty/.gitted/objects/1b/31d55e0c53efbea6c670ece9057b76b5822eea
+++ /dev/null
@@ -1,2 +0,0 @@
-xa
-!)Z|t"O'>1׈}ݠ5
̄Zʭî7ffV)JC9Y%URN~fcgsmp/"\s-k}/M q쥖R:;9#.wmz@
\ No newline at end of file
diff --git a/tests/resources/nasty/.gitted/objects/4d/83272d0d372e1232ddc4ff3260d76fdfa2015a b/tests/resources/nasty/.gitted/objects/4d/83272d0d372e1232ddc4ff3260d76fdfa2015a
new file mode 100644
index 0000000..d362f1d
--- /dev/null
+++ b/tests/resources/nasty/.gitted/objects/4d/83272d0d372e1232ddc4ff3260d76fdfa2015a
@@ -0,0 +1,2 @@
+xK
+1D]}Dx/ONH"2wo=5e@}L<%AD̄VI:%IrIDPs̵-|KpkvIW_;Ś/@-WGTl?gX}lзDX`oԙD
\ No newline at end of file
diff --git a/tests/resources/nasty/.gitted/objects/7b/b1dd08b2c7d73084934954e4196e67004b0279 b/tests/resources/nasty/.gitted/objects/7b/b1dd08b2c7d73084934954e4196e67004b0279
new file mode 100644
index 0000000..e6640e6
Binary files /dev/null and b/tests/resources/nasty/.gitted/objects/7b/b1dd08b2c7d73084934954e4196e67004b0279 differ
diff --git a/tests/resources/nasty/.gitted/objects/91/cd2c95af92883550b45fcc838013ae7e2954df b/tests/resources/nasty/.gitted/objects/91/cd2c95af92883550b45fcc838013ae7e2954df
new file mode 100644
index 0000000..da9d5c4
Binary files /dev/null and b/tests/resources/nasty/.gitted/objects/91/cd2c95af92883550b45fcc838013ae7e2954df differ
diff --git a/tests/resources/nasty/.gitted/objects/9d/5898503adc01d763e279ac8fcefbe865b19031 b/tests/resources/nasty/.gitted/objects/9d/5898503adc01d763e279ac8fcefbe865b19031
new file mode 100644
index 0000000..7cb3106
--- /dev/null
+++ b/tests/resources/nasty/.gitted/objects/9d/5898503adc01d763e279ac8fcefbe865b19031
@@ -0,0 +1,4 @@
+xO[ S4R
+Icz
+۴t
bK7k^L&pJS%qS2T=51vo45tzuQFpO#\FNw^HvVQTFߩy
+0Ouy$>F
\ No newline at end of file
diff --git a/tests/resources/nasty/.gitted/objects/a0/d89aa95628fcd6b64fd5b23dd56b906b06bfe2 b/tests/resources/nasty/.gitted/objects/a0/d89aa95628fcd6b64fd5b23dd56b906b06bfe2
new file mode 100644
index 0000000..c1de43b
Binary files /dev/null and b/tests/resources/nasty/.gitted/objects/a0/d89aa95628fcd6b64fd5b23dd56b906b06bfe2 differ
diff --git a/tests/resources/nasty/.gitted/objects/a7/8dde970cffbb71d67bef2a74aa72c6621d9819 b/tests/resources/nasty/.gitted/objects/a7/8dde970cffbb71d67bef2a74aa72c6621d9819
new file mode 100644
index 0000000..78c2fe4
Binary files /dev/null and b/tests/resources/nasty/.gitted/objects/a7/8dde970cffbb71d67bef2a74aa72c6621d9819 differ
diff --git a/tests/resources/nasty/.gitted/objects/ac/84d85a425b2a21fd0ffccacac6c48823fc98c8 b/tests/resources/nasty/.gitted/objects/ac/84d85a425b2a21fd0ffccacac6c48823fc98c8
new file mode 100644
index 0000000..b08e247
Binary files /dev/null and b/tests/resources/nasty/.gitted/objects/ac/84d85a425b2a21fd0ffccacac6c48823fc98c8 differ
diff --git a/tests/resources/nasty/.gitted/objects/bc/e2dabe5766838216d95f199d95aa4fd479a084 b/tests/resources/nasty/.gitted/objects/bc/e2dabe5766838216d95f199d95aa4fd479a084
new file mode 100644
index 0000000..b1eab10
Binary files /dev/null and b/tests/resources/nasty/.gitted/objects/bc/e2dabe5766838216d95f199d95aa4fd479a084 differ
diff --git a/tests/resources/nasty/.gitted/objects/cf/6fcf8cdf7e8d4cda3b11b0ba02d0d5125fbbd7 b/tests/resources/nasty/.gitted/objects/cf/6fcf8cdf7e8d4cda3b11b0ba02d0d5125fbbd7
new file mode 100644
index 0000000..f65e8ff
--- /dev/null
+++ b/tests/resources/nasty/.gitted/objects/cf/6fcf8cdf7e8d4cda3b11b0ba02d0d5125fbbd7
@@ -0,0 +1,2 @@
+x]
+0})Jm	`ӕQooo70x9@%7e%kh0QAGi5F^
+î/0Ruos;yEöBֈ+;9-uoG
\ No newline at end of file
diff --git a/tests/resources/nasty/.gitted/objects/e5/1c3fa44fe981ec290c8f47fea736f3ff2af2a6 b/tests/resources/nasty/.gitted/objects/e5/1c3fa44fe981ec290c8f47fea736f3ff2af2a6
new file mode 100644
index 0000000..3d12f3a
Binary files /dev/null and b/tests/resources/nasty/.gitted/objects/e5/1c3fa44fe981ec290c8f47fea736f3ff2af2a6 differ
diff --git a/tests/resources/nasty/.gitted/objects/e8/68b1d6833710021785581a9e11dba8468f3a55 b/tests/resources/nasty/.gitted/objects/e8/68b1d6833710021785581a9e11dba8468f3a55
new file mode 100644
index 0000000..8311ad3
Binary files /dev/null and b/tests/resources/nasty/.gitted/objects/e8/68b1d6833710021785581a9e11dba8468f3a55 differ
diff --git a/tests/resources/nasty/.gitted/refs/heads/symlink1 b/tests/resources/nasty/.gitted/refs/heads/symlink1
new file mode 100644
index 0000000..efa2e88
--- /dev/null
+++ b/tests/resources/nasty/.gitted/refs/heads/symlink1
@@ -0,0 +1 @@
+4d83272d0d372e1232ddc4ff3260d76fdfa2015a
diff --git a/tests/resources/nasty/.gitted/refs/heads/symlink2 b/tests/resources/nasty/.gitted/refs/heads/symlink2
new file mode 100644
index 0000000..e4f3d60
--- /dev/null
+++ b/tests/resources/nasty/.gitted/refs/heads/symlink2
@@ -0,0 +1 @@
+9d5898503adc01d763e279ac8fcefbe865b19031
diff --git a/tests/resources/nasty/.gitted/refs/heads/symlink3 b/tests/resources/nasty/.gitted/refs/heads/symlink3
new file mode 100644
index 0000000..2b33e4f
--- /dev/null
+++ b/tests/resources/nasty/.gitted/refs/heads/symlink3
@@ -0,0 +1 @@
+cf6fcf8cdf7e8d4cda3b11b0ba02d0d5125fbbd7