@@ -44,4 +44,85 @@ test_expect_success 'apply --index symlink patch' '
4444
4545'
4646
47+ test_expect_success ' symlink setup' '
48+ ln -s .git symlink &&
49+ git add symlink &&
50+ git commit -m "add symlink"
51+ '
52+
53+ test_expect_success SYMLINKS ' symlink escape when creating new files' '
54+ test_when_finished "git reset --hard && git clean -dfx" &&
55+
56+ cat >patch <<-EOF &&
57+ diff --git a/symlink b/renamed-symlink
58+ similarity index 100%
59+ rename from symlink
60+ rename to renamed-symlink
61+ --
62+ diff --git /dev/null b/renamed-symlink/create-me
63+ new file mode 100644
64+ index 0000000..039727e
65+ --- /dev/null
66+ +++ b/renamed-symlink/create-me
67+ @@ -0,0 +1,1 @@
68+ +busted
69+ EOF
70+
71+ test_must_fail git apply patch 2>stderr &&
72+ cat >expected_stderr <<-EOF &&
73+ error: affected file ${SQ}renamed-symlink/create-me${SQ} is beyond a symbolic link
74+ EOF
75+ test_cmp expected_stderr stderr &&
76+ ! test_path_exists .git/create-me
77+ '
78+
79+ test_expect_success SYMLINKS ' symlink escape when modifying file' '
80+ test_when_finished "git reset --hard && git clean -dfx" &&
81+ touch .git/modify-me &&
82+
83+ cat >patch <<-EOF &&
84+ diff --git a/symlink b/renamed-symlink
85+ similarity index 100%
86+ rename from symlink
87+ rename to renamed-symlink
88+ --
89+ diff --git a/renamed-symlink/modify-me b/renamed-symlink/modify-me
90+ index 1111111..2222222 100644
91+ --- a/renamed-symlink/modify-me
92+ +++ b/renamed-symlink/modify-me
93+ @@ -0,0 +1,1 @@
94+ +busted
95+ EOF
96+
97+ test_must_fail git apply patch 2>stderr &&
98+ cat >expected_stderr <<-EOF &&
99+ error: renamed-symlink/modify-me: No such file or directory
100+ EOF
101+ test_cmp expected_stderr stderr &&
102+ test_must_be_empty .git/modify-me
103+ '
104+
105+ test_expect_success SYMLINKS ' symlink escape when deleting file' '
106+ test_when_finished "git reset --hard && git clean -dfx && rm .git/delete-me" &&
107+ touch .git/delete-me &&
108+
109+ cat >patch <<-EOF &&
110+ diff --git a/symlink b/renamed-symlink
111+ similarity index 100%
112+ rename from symlink
113+ rename to renamed-symlink
114+ --
115+ diff --git a/renamed-symlink/delete-me b/renamed-symlink/delete-me
116+ deleted file mode 100644
117+ index 1111111..0000000 100644
118+ EOF
119+
120+ test_must_fail git apply patch 2>stderr &&
121+ cat >expected_stderr <<-EOF &&
122+ error: renamed-symlink/delete-me: No such file or directory
123+ EOF
124+ test_cmp expected_stderr stderr &&
125+ test_path_is_file .git/delete-me
126+ '
127+
47128test_done
0 commit comments