make File::try_clone produce non-inheritable handles on Windows

File handles shouldn't be inheritable in general.
`std::process::Command` takes care of making them inheritable when child
processes are spawned, and the `CREATE_PROCESS_LOCK` protects against
races in that section on Windows. But `File::try_clone` has been
creating inheritable file descriptors outside of that lock, which could
be leaking into other child processes unintentionally.

See also https://github.com/rust-lang/rust/pull/31069#discussion_r334117665.
This commit is contained in:
Jack O'Connor 2019-10-11 14:23:25 -04:00
parent d4f7f974b8
commit 93ae6924af

View File

@ -412,7 +412,7 @@ impl File {
pub fn duplicate(&self) -> io::Result<File> {
Ok(File {
handle: self.handle.duplicate(0, true, c::DUPLICATE_SAME_ACCESS)?,
handle: self.handle.duplicate(0, false, c::DUPLICATE_SAME_ACCESS)?,
})
}