]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
runtime(ftplugin): allow to exec if curdir is in PATH
authorAnton Sharonov <anton.sharonov@gmail.com>
Tue, 5 Sep 2023 19:03:27 +0000 (21:03 +0200)
committerChristian Brabandt <cb@256bit.org>
Tue, 5 Sep 2023 19:04:44 +0000 (21:04 +0200)
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>
runtime/autoload/gzip.vim
runtime/autoload/zip.vim
runtime/ftplugin/perl.vim
runtime/ftplugin/ruby.vim
runtime/ftplugin/zig.vim

index ac9e37bf85e7ed49d3f51d2d318de31ba92e4f09..6d0bb13401a8a3543b9fa48fc98827fd1cdd3c16 100644 (file)
@@ -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
index 0331a542aca409512b8f9a66688d98a22d761ac1..8b39c91c3ab04f23a9ec9be5cb87d03c6d96e397 100644 (file)
@@ -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
 " ----------------
index edc7b960f12f9a0d017223ee4f72a5fc5d4bf649..4361097f3297c915774fe92ec174460c1150580f 100644 (file)
@@ -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)"')
@@ -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
index daffe1e0dc175f20389f8fd127dcadd4f2c84384..a424801cd169137bc766090e22e8f032d4ef9711 100644 (file)
@@ -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
index cd18bfe2bda02bae0785693f0b289b29029bc955..45ea582615ee591f7d485cdb6af1f097f37d0300 100644 (file)
@@ -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