From: YeshunYe <yeyeshun@uniontech.com> The parameter of the 'pushd' command may contain ‘/’, which is compatible with Windows if quoted. Signed-off-by: YeshunYe <yeyeshun@uniontech.com> --- programs/cmd/builtins.c | 2 +- programs/cmd/tests/test_builtins.bat | 1 + programs/cmd/tests/test_builtins.bat.exp | 1 + programs/cmd/tests/test_builtins.cmd | 1 + programs/cmd/tests/test_builtins.cmd.exp | 1 + 5 files changed, 5 insertions(+), 1 deletion(-) diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c index 7d1ad5c1e15..9c86c6b1796 100644 --- a/programs/cmd/builtins.c +++ b/programs/cmd/builtins.c @@ -1783,7 +1783,7 @@ RETURN_CODE WCMD_pushd(const WCHAR *args) if (!*args) return errorlevel = NO_ERROR; - if (wcschr(args, '/') != NULL) { + if (*args == '/') { SetLastError(ERROR_INVALID_PARAMETER); WCMD_print_error(); return errorlevel = ERROR_INVALID_FUNCTION; diff --git a/programs/cmd/tests/test_builtins.bat b/programs/cmd/tests/test_builtins.bat index 1bd3de55292..518752d5861 100644 --- a/programs/cmd/tests/test_builtins.bat +++ b/programs/cmd/tests/test_builtins.bat @@ -190,6 +190,7 @@ call :setError 666 & (pushd abc &&echo SUCCESS !errorlevel!||echo FAILURE !error call :setError 666 & (pushd abc &&echo SUCCESS !errorlevel!||echo FAILURE !errorlevel!) call :setError 666 & (popd abc &&echo SUCCESS !errorlevel!||echo FAILURE !errorlevel!) call :setError 666 & (popd &&echo SUCCESS !errorlevel!||echo FAILURE !errorlevel!) +call :setError 666 & (pushd "abc/"&&echo SUCCESS !errorlevel!||echo FAILURE !errorlevel!) call :setError 666 & popd & echo ERRORLEVEL !errorlevel! cd .. && rd /q /s foo diff --git a/programs/cmd/tests/test_builtins.bat.exp b/programs/cmd/tests/test_builtins.bat.exp index 397b720c3bf..1fc6db28e2f 100644 --- a/programs/cmd/tests/test_builtins.bat.exp +++ b/programs/cmd/tests/test_builtins.bat.exp @@ -123,6 +123,7 @@ SUCCESS 0 FAILURE 1 SUCCESS 666 FAILURE 1 +SUCCESS 0 ERRORLEVEL 666 --- success/failure for DIR command FAILURE 1 diff --git a/programs/cmd/tests/test_builtins.cmd b/programs/cmd/tests/test_builtins.cmd index 36b36699772..fc87b8dd83d 100644 --- a/programs/cmd/tests/test_builtins.cmd +++ b/programs/cmd/tests/test_builtins.cmd @@ -773,6 +773,7 @@ call :setError 666 & (pushd abc &&echo SUCCESS !errorlevel!||echo FAILURE !error call :setError 666 & (pushd abc &&echo SUCCESS !errorlevel!||echo FAILURE !errorlevel!) call :setError 666 & (popd abc &&echo SUCCESS !errorlevel!||echo FAILURE !errorlevel!) call :setError 666 & (popd &&echo SUCCESS !errorlevel!||echo FAILURE !errorlevel!) +call :setError 666 & (pushd "abc/"&&echo SUCCESS !errorlevel!||echo FAILURE !errorlevel!) call :setError 666 & popd & echo ERRORLEVEL !errorlevel! cd .. && rd /q /s foo diff --git a/programs/cmd/tests/test_builtins.cmd.exp b/programs/cmd/tests/test_builtins.cmd.exp index d169066a167..409021ad4a9 100644 --- a/programs/cmd/tests/test_builtins.cmd.exp +++ b/programs/cmd/tests/test_builtins.cmd.exp @@ -642,6 +642,7 @@ SUCCESS 0 FAILURE 1 SUCCESS 666 FAILURE 1 +SUCCESS 0 ERRORLEVEL 666 --- success/failure for DIR command FAILURE 1 -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9881