Module: wine Branch: master Commit: fc1bb9aff5c5af22819879e98ffab25bc833fb03 URL: https://source.winehq.org/git/wine.git/?a=commit;h=fc1bb9aff5c5af22819879e98... Author: Francesco Noferi <lolisamurai(a)tfwno.gf> Date: Fri Sep 11 09:25:48 2020 +0000 cmd.exe: Fix parsing of && between quotes. Signed-off-by: Francesco Noferi <lolisamurai(a)tfwno.gf> Signed-off-by: Myah Caron <qsniyg(a)protonmail.com> Signed-off-by: Alexandre Julliard <julliard(a)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(a)space@ 0(a)space@ 5(a)space@ +hi +hi +hi ------- Testing CMD /C qualifier treatment ------------ 0(a)space@ 1(a)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; }