patch 8.2.3219: :find searches non-existing directories

Problem:    :find searches non-existing directories.
Solution:   Check the path is not "..".  Update help. (Christian Brabandt,
            closes #8612, closes #8533)
This commit is contained in:
Christian Brabandt
2021-07-25 15:08:05 +02:00
committed by Bram Moolenaar
parent 8a4c812ede
commit 7a4ca32175
4 changed files with 39 additions and 0 deletions

View File

@ -1749,6 +1749,12 @@ There are three different types of searching:
/u/user_x/work/include
/u/user_x/include
< Note: If your 'path' setting includes an non-existing directory, Vim will
skip the non-existing directory, but continues searching in the parent of
the non-existing directory if upwards searching is used. E.g. when
searching "../include" and that doesn't exist, and upward searching is
used, also searches in "..".
3) Combined up/downward search:
If Vim's current path is /u/user_x/work/release and you do >
set path=**;/u/user_x

View File

@ -578,7 +578,16 @@ vim_findfile_init(
if (p > search_ctx->ffsc_fix_path)
{
// do not add '..' to the path and start upwards searching
len = (int)(p - search_ctx->ffsc_fix_path) - 1;
if ((len >= 2
&& STRNCMP(search_ctx->ffsc_fix_path, "..", 2) == 0)
&& (len == 2
|| search_ctx->ffsc_fix_path[2] == PATHSEP))
{
vim_free(buf);
goto error_return;
}
STRNCAT(ff_expand_buffer, search_ctx->ffsc_fix_path, len);
add_pathsep(ff_expand_buffer);
}

View File

@ -228,4 +228,26 @@ func Test_find_cmd()
call assert_fails('tabfind', 'E471:')
endfunc
func Test_find_non_existing_path()
new
let save_path = &path
let save_dir = getcwd()
call mkdir('dir1/dir2', 'p')
call writefile([], 'dir1/file.txt')
call writefile([], 'dir1/dir2/base.txt')
call chdir('dir1/dir2')
e base.txt
set path=../include
call assert_fails(':find file.txt', 'E345:')
call chdir(save_dir)
bw!
call delete('dir1/dir2/base.txt', 'rf')
call delete('dir1/dir2', 'rf')
call delete('dir1/file.txt', 'rf')
call delete('dir1', 'rf')
let &path = save_path
endfunc
" vim: shiftwidth=2 sts=2 expandtab

View File

@ -755,6 +755,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
3219,
/**/
3218,
/**/