On Wed, 17 Sep 2025 14:51:46 GMT, Magnus Ihse Bursie <[email protected]> wrote:
>> src/java.base/windows/native/launcher/relauncher.c line 153: >> >>> 151: } >>> 152: >>> 153: // Our executable name (should not be quoted) >> >> ok here, because the full path is being explicitly passed to CreateProcess. >> If the command line is to be parsed and the executable path contains a >> space, CreateProcess does say it should be quoted. It would be good to have >> a test case with a space in the executable path. > > Indeed, this seems sus. I need to dig more into this. I recall initially > quoting all arguments and then running into problems with the executable. > Maybe it is that spaces needs to be quoted, but not other special characters. > I'll check what you are doing in ProcessImpl.java and see if I can align my > code to do the same. Passing arguments on Windows is tricky. We faced a similar challenge implementing shims in the Windows JDK installer. See [JDK-8266473](https://bugs.openjdk.org/browse/JDK-8266473), [JDK-8296383](https://bugs.openjdk.org/browse/JDK-8296383), and [JDK-8309489](https://bugs.openjdk.org/browse/JDK-8309489). All three CRs about the same issue until we finally fixed it properly. You need to encode command line args in a string suitable for passing to `CreateProcess()` function. The decoding algorithm is described at https://learn.microsoft.com/en-us/cpp/c-language/parsing-c-command-line-arguments?view=msvc-170&redirectedfrom=MSDN. You need to implement the reverse algorithm. It is not officially documented at MSDN. Fortunately, somebody contributed it to the blog post at https://learn.microsoft.com/en-us/archive/blogs/twistylittlepassagesallalike/everyone-quotes-command-line-arguments-the-wrong-way. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/24380#discussion_r2355902250
