On Fri, 18 Feb 2022 17:21:48 GMT, Olga Mikhaltsova <omikhaltc...@openjdk.org> wrote:
>> This fix made equal processing of strings such as ""C:\\Program >> Files\\Git\\"" before and after JDK-8250568. >> >> For example, it's needed to execute the following command on Windows: >> `C:\Windows\SysWOW64\WScript.exe "MyVB.vbs" "C:\Program Files\Git" "Test"` >> it's equal to: >> `new ProcessBuilder("C:\\Windows\\SysWOW64\\WScript.exe", "MyVB.vbs", >> ""C:\\Program Files\\Git\\"", "Test").start();` >> >> While processing, the 3rd argument ""C:\\Program Files\\Git\\"" treated as >> unquoted due to the condition added in JDK-8250568. >> >> private static String unQuote(String str) { >> .. >> if (str.endsWith("\\"")) { >> return str; // not properly quoted, treat as unquoted >> } >> .. >> } >> >> >> that leads to the additional surrounding by quotes in >> ProcessImpl::createCommandLine(..) because needsEscaping(..) returns true >> due to the space inside the string argument. >> As a result the native function CreateProcessW >> (src/java.base/windows/native/libjava/ProcessImpl_md.c) gets the incorrectly >> quoted argument: >> >> pcmd = C:\Windows\SysWOW64\WScript.exe MyVB.vbs ""C:\Program Files\Git"" Test >> (jdk.lang.Process.allowAmbiguousCommands = true) >> pcmd = "C:\Windows\SysWOW64\WScript.exe" MyVB.vbs ""C:\Program Files\Git\\"" >> Test >> (jdk.lang.Process.allowAmbiguousCommands = false) >> >> >> Obviously, a string ending with `"\\""` must not be started with `"""` to >> treat as unquoted overwise it’s should be treated as properly quoted. > > Olga Mikhaltsova has updated the pull request incrementally with one > additional commit since the last revision: > > Add a new line to the end of test file for JDK-8282008 ProcessBuilder handles the quoting of arguments with spaces. In your QuotedArguments.java, just remove the quotes from the first argument to CheckCase: ```CheckCase[] cases = { new CheckCase("C:\\Program Files\\Git\", "C:\\Program Files\\Git\", "true"), new CheckCase("C:\\Program Files\\Git\", "C:\\Program Files\\Git\", "false") }; That worked for me using openjdk version "17.0.2". Problems with knowing what and if to quote go back a long time. I'm working on a new [JEP](https://bugs.openjdk.java.net/browse/JDK-8263697) to handle more of the cases without application intervention. ------------- PR: https://git.openjdk.java.net/jdk/pull/7504