1
0
forked from aniani/vim

patch 8.1.0468: MS-Windows: filter command with pipe character fails

Problem:    MS-Windows: Filter command with pipe character fails. (Johannes
            Riecken)
Solution:   Find the pipe character outside of quotes. (Yasuhiro Matsumoto,
            closes #1743, closes #3523)
This commit is contained in:
Bram Moolenaar
2018-10-09 21:49:33 +02:00
parent 1d3dbcf743
commit 0664089ecc
3 changed files with 37 additions and 2 deletions

View File

@@ -1676,6 +1676,26 @@ do_shell(
apply_autocmds(EVENT_SHELLCMDPOST, NULL, NULL, FALSE, curbuf);
}
#if !defined(UNIX)
static char_u *
find_pipe(char_u *cmd)
{
char_u *p;
int inquote = FALSE;
for (p = cmd; *p != NUL; ++p)
{
if (!inquote && *p == '|')
return p;
if (*p == '"')
inquote = !inquote;
else if (rem_backslash(p))
++p;
}
return NULL;
}
#endif
/*
* Create a shell command from a command string, input redirection file and
* output redirection file.
@@ -1746,7 +1766,7 @@ make_filter_cmd(
*/
if (*p_shq == NUL)
{
p = vim_strchr(buf, '|');
p = find_pipe(buf);
if (p != NULL)
*p = NUL;
}
@@ -1754,7 +1774,7 @@ make_filter_cmd(
STRCAT(buf, itmp);
if (*p_shq == NUL)
{
p = vim_strchr(cmd, '|');
p = find_pipe(cmd);
if (p != NULL)
{
STRCAT(buf, " "); /* insert a space before the '|' for DOS */