Skip to content

Commit 2610990

Browse files
committed
patch 8.1.0454: resolve() was not tested with a symlink cycle
Problem: resolve() was not tested with a symlink cycle. Solution: Add a test. (Dominique Pelle, closes #3513)
1 parent 8295666 commit 2610990

File tree

2 files changed

+48
-0
lines changed

2 files changed

+48
-0
lines changed

src/testdir/test_functions.vim

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,52 @@ func Test_strftime()
190190
call assert_fails('call strftime("%Y", [])', 'E745:')
191191
endfunc
192192

193+
func Test_resolve()
194+
if !has('unix')
195+
return
196+
endif
197+
198+
" Xlink1 -> Xlink2
199+
" Xlink2 -> Xlink3
200+
silent !ln -s -f Xlink2 Xlink1
201+
silent !ln -s -f Xlink3 Xlink2
202+
call assert_equal('Xlink3', resolve('Xlink1'))
203+
call assert_equal('./Xlink3', resolve('./Xlink1'))
204+
call assert_equal('Xlink3/', resolve('Xlink2/'))
205+
" FIXME: these tests result in things like "Xlink2/" instead of "Xlink3/"?!
206+
"call assert_equal('Xlink3/', resolve('Xlink1/'))
207+
"call assert_equal('./Xlink3/', resolve('./Xlink1/'))
208+
"call assert_equal(getcwd() . '/Xlink3/', resolve(getcwd() . '/Xlink1/'))
209+
call assert_equal(getcwd() . '/Xlink3', resolve(getcwd() . '/Xlink1'))
210+
211+
" Test resolve() with a symlink cycle.
212+
" Xlink1 -> Xlink2
213+
" Xlink2 -> Xlink3
214+
" Xlink3 -> Xlink1
215+
silent !ln -s -f Xlink1 Xlink3
216+
call assert_fails('call resolve("Xlink1")', 'E655:')
217+
call assert_fails('call resolve("./Xlink1")', 'E655:')
218+
call assert_fails('call resolve("Xlink2")', 'E655:')
219+
call assert_fails('call resolve("Xlink3")', 'E655:')
220+
call delete('Xlink1')
221+
call delete('Xlink2')
222+
call delete('Xlink3')
223+
224+
silent !ln -s -f Xdir//Xfile Xlink
225+
call assert_equal('Xdir/Xfile', resolve('Xlink'))
226+
call delete('Xlink')
227+
228+
silent !ln -s -f Xlink2/ Xlink1
229+
call assert_equal('Xlink2', resolve('Xlink1'))
230+
call assert_equal('Xlink2/', resolve('Xlink1/'))
231+
call delete('Xlink1')
232+
233+
silent !ln -s -f ./Xlink2 Xlink1
234+
call assert_equal('Xlink2', resolve('Xlink1'))
235+
call assert_equal('./Xlink2', resolve('./Xlink1'))
236+
call delete('Xlink1')
237+
endfunc
238+
193239
func Test_simplify()
194240
call assert_equal('', simplify(''))
195241
call assert_equal('/', simplify('/'))

src/version.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -792,6 +792,8 @@ static char *(features[]) =
792792

793793
static int included_patches[] =
794794
{ /* Add new patch number below this line */
795+
/**/
796+
454,
795797
/**/
796798
453,
797799
/**/

0 commit comments

Comments
 (0)