Module: wine
Branch: master
Commit: c418771a43ed01ebe464b37405da506bc64a6fe0
URL: https://gitlab.winehq.org/wine/wine/-/commit/c418771a43ed01ebe464b37405da50…
Author: Bernhard Übelacker <bernhardu(a)mailbox.org>
Date: Fri Feb 9 21:45:57 2024 +0100
cmd: Avoid execution if block misses closing brackets.
---
programs/cmd/tests/test_builtins.cmd | 24 ++++++++++++++++++++++++
programs/cmd/tests/test_builtins.cmd.exp | 5 +++++
programs/cmd/wcmdmain.c | 7 +++++++
3 files changed, 36 insertions(+)
diff --git a/programs/cmd/tests/test_builtins.cmd b/programs/cmd/tests/test_builtins.cmd
index 44dfd080b90..1ab2935aec4 100644
--- a/programs/cmd/tests/test_builtins.cmd
+++ b/programs/cmd/tests/test_builtins.cmd
@@ -1055,6 +1055,30 @@ 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
+::
+echo echo before both blocks> blockclosing.cmd
+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
+::
+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..0fb4a597ac5 100644
--- a/programs/cmd/tests/test_builtins.cmd.exp
+++ b/programs/cmd/tests/test_builtins.cmd.exp
@@ -713,6 +713,11 @@ 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
+before both blocks
+255 nested
--- 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 09cfeae1a01..1867c5afb92 100644
--- a/programs/cmd/wcmdmain.c
+++ b/programs/cmd/wcmdmain.c
@@ -2347,6 +2347,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);
Module: wine
Branch: master
Commit: d7edf3e651a2601d6086f49d3b2907e2321b8607
URL: https://gitlab.winehq.org/wine/wine/-/commit/d7edf3e651a2601d6086f49d3b2907…
Author: Bernhard Übelacker <bernhardu(a)mailbox.org>
Date: Fri Feb 9 21:45:37 2024 +0100
cmd: Handle lines with just spaces in bracket blocks.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51599
---
programs/cmd/tests/test_builtins.cmd | 26 ++++++++++++++++++++++++++
programs/cmd/tests/test_builtins.cmd.exp | 6 ++++++
programs/cmd/wcmdmain.c | 1 +
3 files changed, 33 insertions(+)
diff --git a/programs/cmd/tests/test_builtins.cmd b/programs/cmd/tests/test_builtins.cmd
index 510a1ba5931..44dfd080b90 100644
--- a/programs/cmd/tests/test_builtins.cmd
+++ b/programs/cmd/tests/test_builtins.cmd
@@ -1029,6 +1029,32 @@ if not exist %windir% (
) else (
echo windir does exist
)
+if 1 == 0 (
+ echo 1 == 0 should not be true
+@space@
+) else echo block containing a line with just space seems to work
+if 1 == 0 (
+ echo 1 == 0 should not be true
+@tab@
+) else echo block containing a line with just tab seems to work
+if 1 == 0 (
+ echo 1 == 0 should not be true
+@space@@tab@
+) else echo block containing a line with just space and tab seems to work
+if 1 == 0 (
+ echo 1 == 0 should not be true
+@tab@@space@
+) else echo block containing a line with just tab and space seems to work
+if 1 == 0 (
+ echo 1 == 0 should not be true
+@space@
+@space@
+) else echo block containing two lines with just space seems to work
+if 1 == 0 (
+ echo 1 == 0 should not be true
+@tab@
+@tab@
+) else echo block containing two lines with just tab seems to work
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 0f48a823109..fc1f9991df4 100644
--- a/programs/cmd/tests/test_builtins.cmd.exp
+++ b/programs/cmd/tests/test_builtins.cmd.exp
@@ -707,6 +707,12 @@ comparison operators surrounded by brackets seem to work
comparison operators surrounded by brackets seem to work
windir is defined
windir does exist
+block containing a line with just space seems to work
+block containing a line with just tab seems to work
+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
--- 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 843fef8ea50..09cfeae1a01 100644
--- a/programs/cmd/wcmdmain.c
+++ b/programs/cmd/wcmdmain.c
@@ -2326,6 +2326,7 @@ WCHAR *WCMD_ReadAndParseLine(const WCHAR *optionalcmd, CMD_LIST **output, HANDLE
} else break;
}
+ extraData = WCMD_skip_leading_spaces(extraData);
} while (*extraData == 0x00);
curPos = extraSpace;