Skip to content

Commit

Permalink
runtime(ftplugin): allow to exec if curdir is in PATH
Browse files Browse the repository at this point in the history
In case the current directory is present as valid $PATH entry, it is OK
to call the program from it, even if vim curdir is in that same
directory.

(Without that patch, for instance, you will not be able to open .zip
files while your current directory is /bin)

closes: #13027

Signed-off-by: Christian Brabandt <cb@256bit.org>
  • Loading branch information
haron13-2019 authored and chrisbra committed Sep 5, 2023
1 parent 9b04c50 commit 67c951d
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 5 deletions.
5 changes: 4 additions & 1 deletion runtime/autoload/gzip.vim
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,10 @@ fun s:check(cmd)
let name = substitute(a:cmd, '\(\S*\).*', '\1', '')
if !exists("s:have_" . name)
" safety check, don't execute anything from the current directory
let f = fnamemodify(exepath(name), ":p:h") !=# getcwd()
let s:tmp_cwd = getcwd()
let f = (fnamemodify(exepath(name), ":p:h") !=# s:tmp_cwd
\ || (index(split($PATH,has("win32")? ';' : ':'), s:tmp_cwd) != -1 && s:tmp_cwd != '.'))
unlet s:tmp_cwd
if !f
echoerr "Warning: NOT executing " .. name .. " from current directory!"
endif
Expand Down
7 changes: 6 additions & 1 deletion runtime/autoload/zip.vim
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,15 @@ if !exists("g:zip_extractcmd")
let g:zip_extractcmd= g:zip_unzipcmd
endif

if fnamemodify(exepath(g:zip_unzipcmd), ":p:h") ==# getcwd()
let s:tmp_cwd = getcwd()
if (fnamemodify(exepath(g:zip_unzipcmd), ":p:h") ==# getcwd()
\ && (index(split($PATH,has("win32")? ';' : ':'), s:tmp_cwd) == -1 || s:tmp_cwd == '.'))
unlet s:tmp_cwd
echoerr "Warning: NOT executing " .. g:zip_unzipcmd .. " from current directory!"
finish
endif
unlet s:tmp_cwd

" ----------------
" Functions: {{{1
" ----------------
Expand Down
5 changes: 4 additions & 1 deletion runtime/ftplugin/perl.vim
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,9 @@ endif
" Set this once, globally.
if !exists("perlpath")
" safety check: don't execute perl from current directory
if executable("perl") && fnamemodify(exepath("perl"), ":p:h") != getcwd()
let s:tmp_cwd = getcwd()
if executable("perl") && (fnamemodify(exepath("perl"), ":p:h") != s:tmp_cwd
\ || (index(split($PATH,has("win32")? ';' : ':'), s:tmp_cwd) != -1 && s:tmp_cwd != '.'))
try
if &shellxquote != '"'
let perlpath = system('perl -e "print join(q/,/,@INC)"')
Expand All @@ -71,6 +73,7 @@ if !exists("perlpath")
" current directory and the directory of the current file.
let perlpath = ".,,"
endif
unlet s:tmp_cwd
endif

" Append perlpath to the existing path value, if it is set. Since we don't
Expand Down
5 changes: 4 additions & 1 deletion runtime/ftplugin/ruby.vim
Original file line number Diff line number Diff line change
Expand Up @@ -77,11 +77,14 @@ function! s:query_path(root) abort
let cwd = fnameescape(getcwd())
try
exe cd fnameescape(a:root)
if fnamemodify(exepath('ruby'), ':p:h') ==# cwd
let s:tmp_cwd = getcwd()
if (fnamemodify(exepath('ruby'), ':p:h') ==# cwd
\ && (index(split($PATH,has("win32")? ';' : ':'), s:tmp_cwd) == -1 || s:tmp_cwd == '.'))
let path = []
else
let path = split(system(path_check),',')
endif
unlet s:tmp_cwd
exe cd cwd
return path
finally
Expand Down
5 changes: 4 additions & 1 deletion runtime/ftplugin/zig.vim
Original file line number Diff line number Diff line change
Expand Up @@ -40,14 +40,17 @@ endif
let &l:define='\v(<fn>|<const>|<var>|^\s*\#\s*define)'

" Safety check: don't execute zip from current directory
let s:tmp_cwd = getcwd()
if !exists('g:zig_std_dir') && exists('*json_decode') &&
\ executable('zig') && fnamemodify(exepath("zig"), ":p:h") != getcwd()
\ executable('zig') && (fnamemodify(exepath("zig"), ":p:h") != s:tmp_cwd
\ || (index(split($PATH,has("win32")? ';' : ':'), s:tmp_cwd) != -1 && s:tmp_cwd != '.'))
silent let s:env = system('zig env')
if v:shell_error == 0
let g:zig_std_dir = json_decode(s:env)['std_dir']
endif
unlet! s:env
endif
unlet s:tmp_cwd

if exists('g:zig_std_dir')
let &l:path = &l:path . ',' . g:zig_std_dir
Expand Down

0 comments on commit 67c951d

Please sign in to comment.