Bug#542430: Incorrect wildcard expansion when p_sh has arguments to the shell

James Vega vega.james at gmail.com
Tue Nov 3 21:12:43 UTC 2009


Bram,

The code in src/os_unix.c:mch_expand_wildcards which detects what shell
is being used doesn't work properly if 'shell' has been set to a shell
and arguments (e.g., "/bin/tcsh -f").

5354     else if ((len = STRLEN(p_sh)) >= 3)
5355     {
5356         if (STRCMP(p_sh + len - 3, "csh") == 0)
5357             shell_style = STYLE_GLOB;
5358         else if (STRCMP(p_sh + len - 3, "zsh") == 0)
5359             shell_style = STYLE_PRINT;
5360     }
5361     if (shell_style == STYLE_ECHO && strstr((char *)gettail(p_sh),
5362
"sh") != NULL)
5363         shell_style = STYLE_VIMGLOB;

Vim checks whether the last 3 characters of 'shell' are "csh".  Since
the last 3 characters of p_sh in this case are " -f", Vim then checks
whether "sh" is in gettail(p_sh) and uses sh-compatible shell expansion.

It looks like a safer approach would be to grab p_sh up to the first
whitespace and then use gettail() on that to get the shell name.  That
should reduce the false-positive rate for setting STYLE_VIMGLOB in line
5363.

Although, it'll still fail with shells like fish which will pass the
strstr(..., "sh") check but not work with STYLE_VIMGLOB.  fish does work
with STYLE_ECHO, so we could add that to the special-case list.

-- 
James
GPG Key: 1024D/61326D40 2003-09-02 James Vega <jamessan at debian.org>





More information about the pkg-vim-maintainers mailing list