-
Notifications
You must be signed in to change notification settings - Fork 12.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Always quote program name in Command::spawn on Windows #42436
Conversation
`CreateProcess` will interpret args as part of the binary name if it doesn't find the binary using just the unquoted name. For example if `foo.exe` doesn't exist, `Command::new("foo").arg("bar").spawn()` will try to launch `foo bar.exe` which is clearly not desired.
Alternatively, we could pass the binary name as the first parameter to |
Looks good to me, thanks @ollie27! Would it be possible to add a test for this? Passing the binary name explicitly sounds fine as well, so it sounds like we should just do both things? |
It looks like using the first parameter behaves very differently:
I guess I'll try to write a run-make test for this. |
Make sure args aren't interpreted as part of the program name.
Right, I've added a run-make test. |
📌 Commit 02955f5 has been approved by |
So I just did a quick test and when I passed a verbatim path as the first parameter to |
⌛ Testing commit 02955f5 with merge 9006db1... |
Always quote program name in Command::spawn on Windows [`CreateProcess`](https://msdn.microsoft.com/en-us/library/windows/desktop/ms682425.aspx) will interpret args as part of the binary name if it doesn't find the binary using just the unquoted name. For example if `foo.exe` doesn't exist, `Command::new("foo").arg("bar").spawn()` will try to launch `foo bar.exe` which is clearly not desired.
☀️ Test successful - status-appveyor, status-travis |
In rust-lang#42436 the behavior for spawning processes on Windows was tweaked slightly to fix various bugs, but this caused rust-lang#42791 as a regression, namely that to spawn batch scripts they need to be manually spawned with `cmd /c` instead now. This updates the compiler to handle this case explicitly for Emscripten. Closes rust-lang#42791
In rust-lang#42436 the behavior for spawning processes on Windows was tweaked slightly to fix various bugs, but this caused rust-lang#42791 as a regression, namely that to spawn batch scripts they need to be manually spawned with `cmd /c` instead now. This updates the compiler to handle this case explicitly for Emscripten. Closes rust-lang#42791
…, r=nikomatsakis rustc: Spawn `cmd /c emcc.bat` explicitly In rust-lang#42436 the behavior for spawning processes on Windows was tweaked slightly to fix various bugs, but this caused rust-lang#42791 as a regression, namely that to spawn batch scripts they need to be manually spawned with `cmd /c` instead now. This updates the compiler to handle this case explicitly for Emscripten. Closes rust-lang#42791
…, r=nikomatsakis rustc: Spawn `cmd /c emcc.bat` explicitly In rust-lang#42436 the behavior for spawning processes on Windows was tweaked slightly to fix various bugs, but this caused rust-lang#42791 as a regression, namely that to spawn batch scripts they need to be manually spawned with `cmd /c` instead now. This updates the compiler to handle this case explicitly for Emscripten. Closes rust-lang#42791
…, r=nikomatsakis rustc: Spawn `cmd /c emcc.bat` explicitly In rust-lang#42436 the behavior for spawning processes on Windows was tweaked slightly to fix various bugs, but this caused rust-lang#42791 as a regression, namely that to spawn batch scripts they need to be manually spawned with `cmd /c` instead now. This updates the compiler to handle this case explicitly for Emscripten. Closes rust-lang#42791
…, r=nikomatsakis rustc: Spawn `cmd /c emcc.bat` explicitly In rust-lang#42436 the behavior for spawning processes on Windows was tweaked slightly to fix various bugs, but this caused rust-lang#42791 as a regression, namely that to spawn batch scripts they need to be manually spawned with `cmd /c` instead now. This updates the compiler to handle this case explicitly for Emscripten. Closes rust-lang#42791
CreateProcess
will interpret args as part of the binary name if itdoesn't find the binary using just the unquoted name. For example if
foo.exe
doesn't exist,Command::new("foo").arg("bar").spawn()
willtry to launch
foo bar.exe
which is clearly not desired.