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