0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 8.1.0485: term_start() does not check if directory is accessible

Problem:    term_start() does not check if directory is accessible.
Solution:   Add mch_access() call. (Jason Franklin)
This commit is contained in:
Bram Moolenaar 2018-10-19 16:53:39 +02:00
parent 38654503b0
commit 839e81e12d
3 changed files with 26 additions and 1 deletions

View File

@ -4916,7 +4916,8 @@ get_job_options(typval_T *tv, jobopt_T *opt, int supported, int supported2)
if (!(supported2 & JO2_CWD))
break;
opt->jo_cwd = get_tv_string_buf_chk(item, opt->jo_cwd_buf);
if (opt->jo_cwd == NULL || !mch_isdir(opt->jo_cwd))
if (opt->jo_cwd == NULL || !mch_isdir(opt->jo_cwd)
|| mch_access((char *)opt->jo_cwd, X_OK) != 0)
{
EMSG2(_(e_invargval), "cwd");
return FAIL;

View File

@ -478,6 +478,28 @@ func Test_terminal_cwd()
call delete('Xdir', 'rf')
endfunc
func Test_terminal_cwd_failure()
" Case 1: Provided directory is not actually a directory. Attempt to make
" the file executable as well.
call writefile([], 'Xfile')
call setfperm('Xfile', 'rwx------')
call assert_fails("call term_start(&shell, {'cwd': 'Xfile'})", 'E475:')
call delete('Xfile')
" Case 2: Directory does not exist.
call assert_fails("call term_start(&shell, {'cwd': 'Xdir'})", 'E475:')
" Case 3: Directory exists but is not accessible.
call mkdir('Xdir', '', '0600')
" return early if the directory permissions could not be set properly
if getfperm('Xdir')[2] == 'x'
call delete('Xdir', 'rf')
return
endif
call assert_fails("call term_start(&shell, {'cwd': 'Xdir'})", 'E475:')
call delete('Xdir', 'rf')
endfunc
func Test_terminal_servername()
if !has('clientserver')
return

View File

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