Module: wine Branch: master Commit: fc1bb9aff5c5af22819879e98ffab25bc833fb03 URL: https://source.winehq.org/git/wine.git/?a=commit;h=fc1bb9aff5c5af22819879e98...
Author: Francesco Noferi lolisamurai@tfwno.gf Date: Fri Sep 11 09:25:48 2020 +0000
cmd.exe: Fix parsing of && between quotes.
Signed-off-by: Francesco Noferi lolisamurai@tfwno.gf Signed-off-by: Myah Caron qsniyg@protonmail.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
programs/cmd/tests/test_cmdline.cmd | 4 ++++ programs/cmd/tests/test_cmdline.cmd.exp | 3 +++ programs/cmd/wcmdmain.c | 3 ++- 3 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/programs/cmd/tests/test_cmdline.cmd b/programs/cmd/tests/test_cmdline.cmd index 7a7f8d7b63..8712f05f87 100644 --- a/programs/cmd/tests/test_cmdline.cmd +++ b/programs/cmd/tests/test_cmdline.cmd @@ -178,6 +178,10 @@ rem cond 5 - string between quotes must be name of executable cmd /c "say five" echo @echo 5 >"say five.bat" cmd /c "say five" +rem cond 6 - && between quotes +cd .&&"cmd.exe" /c "echo hi" +cd "."&&cmd.exe /c "echo hi" +cd "."&&"cmd.exe" /c "echo hi"
echo ------- Testing CMD /C qualifier treatment ------------ rem no need for space after /c diff --git a/programs/cmd/tests/test_cmdline.cmd.exp b/programs/cmd/tests/test_cmdline.cmd.exp index 7978a249c9..946e353fcf 100644 --- a/programs/cmd/tests/test_cmdline.cmd.exp +++ b/programs/cmd/tests/test_cmdline.cmd.exp @@ -87,6 +87,9 @@ Passed 2@space@ 0@space@ 5@space@ +hi +hi +hi ------- Testing CMD /C qualifier treatment ------------ 0@space@ 1@space@ diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c index 97cc607a64..47e43fcd67 100644 --- a/programs/cmd/wcmdmain.c +++ b/programs/cmd/wcmdmain.c @@ -1792,7 +1792,8 @@ static BOOL WCMD_IsEndQuote(const WCHAR *quote, int quoteIndex)
/* Quote counting ends at EOL, redirection, space or pipe if current quote is complete */ else if(((quoteCount % 2) == 0) - && ((quote[i] == '<') || (quote[i] == '>') || (quote[i] == '|') || (quote[i] == ' '))) + && ((quote[i] == '<') || (quote[i] == '>') || (quote[i] == '|') || (quote[i] == ' ') || + (quote[i] == '&'))) { break; }