From: Bernhard Übelacker bernhardu@mailbox.org
--- programs/cmd/tests/test_builtins.cmd | 23 +++++++++++++++++++++++ programs/cmd/tests/test_builtins.cmd.exp | 4 ++++ programs/cmd/wcmdmain.c | 7 +++++++ 3 files changed, 34 insertions(+)
diff --git a/programs/cmd/tests/test_builtins.cmd b/programs/cmd/tests/test_builtins.cmd index 44dfd080b90..6aa8e956df3 100644 --- a/programs/cmd/tests/test_builtins.cmd +++ b/programs/cmd/tests/test_builtins.cmd @@ -1055,6 +1055,29 @@ if 1 == 0 ( @tab@ @tab@ ) else echo block containing two lines with just tab seems to work +:: +echo @if 1 == 1 ^(> blockclosing.cmd +echo echo with closing bracket>> blockclosing.cmd +echo ^)>> blockclosing.cmd +cmd.exe /Q /C blockclosing.cmd +echo %ERRORLEVEL% ok +:: +echo @if 1 == 1 ^(> blockclosing.cmd +echo echo without closing bracket first>> blockclosing.cmd +echo echo without closing bracket second>> blockclosing.cmd +cmd.exe /Q /C blockclosing.cmd +echo %ERRORLEVEL% two lines not ok +:: +echo @if 1 == 1 ^(> blockclosing.cmd +echo echo before nested block without closing bracket>> blockclosing.cmd +echo @if 2 == 2 ^(>> blockclosing.cmd +echo echo without closing bracket>> blockclosing.cmd +echo ^)>> blockclosing.cmd +echo echo outside of block without closing bracket>> blockclosing.cmd +cmd.exe /Q /C blockclosing.cmd +echo %ERRORLEVEL% nested not ok +:: +del blockclosing.cmd echo --- case sensitivity with and without /i option if bar==BAR echo if does not default to case sensitivity if not bar==BAR echo if seems to default to case sensitivity diff --git a/programs/cmd/tests/test_builtins.cmd.exp b/programs/cmd/tests/test_builtins.cmd.exp index fc1f9991df4..435f4e9d2b8 100644 --- a/programs/cmd/tests/test_builtins.cmd.exp +++ b/programs/cmd/tests/test_builtins.cmd.exp @@ -713,6 +713,10 @@ block containing a line with just space and tab seems to work block containing a line with just tab and space seems to work block containing two lines with just space seems to work block containing two lines with just tab seems to work +with closing bracket +0 ok +255 two lines not ok +255 nested not ok --- case sensitivity with and without /i option if seems to default to case sensitivity if /i seems to work diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c index 3759b1605da..ff9cd4b8db8 100644 --- a/programs/cmd/wcmdmain.c +++ b/programs/cmd/wcmdmain.c @@ -2362,6 +2362,13 @@ WCHAR *WCMD_ReadAndParseLine(const WCHAR *optionalcmd, CMD_LIST **output, HANDLE } }
+ if (curDepth > lineCurDepth) { + WINE_TRACE("Brackets do not match, error out without executing.\n"); + WCMD_free_commands(*output); + *output = NULL; + errorlevel = 255; + } + /* Dump out the parsed output */ WCMD_DumpCommands(*output);