diff options
author | zeertzjq <zeertzjq@outlook.com> | 2024-07-11 22:24:15 +0200 |
---|---|---|
committer | Christian Brabandt <cb@256bit.org> | 2024-07-11 22:26:01 +0200 |
commit | 764526e2799fbed040fc867858ee2eb0677afe98 (patch) | |
tree | e75e0c1a8e5aade6a5b5622cc33ca87697c97812 | |
parent | e6ab23bd4a41840860ae2904956c4d255a9dd528 (diff) |
patch 9.1.0567: Cannot use relative paths as findfile() stop directoriesv9.1.0567
Problem: Cannot use relative paths as findfile() stop directories.
Solution: Change a relative path to an absolute path.
(zeertzjq)
related: #15200
closes: #15202
Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
-rw-r--r-- | src/findfile.c | 18 | ||||
-rw-r--r-- | src/testdir/test_findfile.vim | 17 | ||||
-rw-r--r-- | src/testdir/test_taglist.vim | 9 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 39 insertions, 7 deletions
diff --git a/src/findfile.c b/src/findfile.c index 149f7c685e..d1cd5f0614 100644 --- a/src/findfile.c +++ b/src/findfile.c @@ -418,6 +418,7 @@ vim_findfile_init( { char_u *helper; void *ptr; + size_t len; helper = walker; ptr = vim_realloc(search_ctx->ffsc_stopdirs_v, @@ -428,18 +429,21 @@ vim_findfile_init( // ignore, keep what we have and continue break; walker = vim_strchr(walker, ';'); - if (walker) + len = walker ? (size_t)(walker - helper) : STRLEN(helper); + // "" means ascent till top of directory tree. + if (*helper != NUL && !vim_isAbsName(helper) + && len + 1 < MAXPATHL) { + // Make the stop dir an absolute path name. + vim_strncpy(ff_expand_buffer, helper, len); search_ctx->ffsc_stopdirs_v[dircount-1] = - vim_strnsave(helper, walker - helper); - walker++; + FullName_save(ff_expand_buffer, FALSE); } else - // this might be "", which means ascent till top - // of directory tree. search_ctx->ffsc_stopdirs_v[dircount-1] = - vim_strsave(helper); - + vim_strnsave(helper, len); + if (walker) + walker++; dircount++; } while (walker != NULL); diff --git a/src/testdir/test_findfile.vim b/src/testdir/test_findfile.vim index 89e583afa8..9247a813da 100644 --- a/src/testdir/test_findfile.vim +++ b/src/testdir/test_findfile.vim @@ -98,12 +98,25 @@ func Test_findfile() " Test upwards search with stop-directory. cd Xdir2 + let l = findfile('bar', ';' . save_dir . '/Xfinddir1/Xdir2/Xdir3/', -1) + call assert_equal(1, len(l)) + call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0]) + let l = findfile('bar', ';' . save_dir . '/Xfinddir1/Xdir2/Xdir3', -1) + call assert_equal(1, len(l)) + call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0]) + let l = findfile('bar', ';../', -1) + call assert_equal(1, len(l)) + call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0]) + let l = findfile('bar', ';' . save_dir . '/Xfinddir1/Xdir2/', -1) call assert_equal(1, len(l)) call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0]) let l = findfile('bar', ';' . save_dir . '/Xfinddir1/Xdir2', -1) call assert_equal(1, len(l)) call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0]) + let l = findfile('bar', ';../../', -1) + call assert_equal(1, len(l)) + call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0]) let l = findfile('bar', ';' . save_dir . '/Xfinddir1/', -1) call assert_equal(2, len(l)) @@ -113,6 +126,10 @@ func Test_findfile() call assert_equal(2, len(l)) call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0]) call assert_match('.*/Xfinddir1/bar', l[1]) + let l = findfile('bar', ';../../../', -1) + call assert_equal(2, len(l)) + call assert_match('.*/Xfinddir1/Xdir2/Xdir3/bar', l[0]) + call assert_match('.*/Xfinddir1/bar', l[1]) " Test combined downwards and upwards search from Xdir2/. cd ../.. diff --git a/src/testdir/test_taglist.vim b/src/testdir/test_taglist.vim index 136acb3dcd..8e0797252a 100644 --- a/src/testdir/test_taglist.vim +++ b/src/testdir/test_taglist.vim @@ -146,6 +146,15 @@ func Test_tagfiles_stopdir() let &tags = './Xtags;' .. fnamemodify('./..', ':p') call assert_equal(0, len(tagfiles())) + let &tags = './Xtags;../' + call assert_equal(0, len(tagfiles())) + + cd .. + call assert_equal(1, len(tagfiles())) + + cd .. + call assert_equal(1, len(tagfiles())) + set tags& call chdir(save_cwd) endfunc diff --git a/src/version.c b/src/version.c index 4e14bf18f5..c7499bb3f5 100644 --- a/src/version.c +++ b/src/version.c @@ -705,6 +705,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 567, +/**/ 566, /**/ 565, |