From adb3e13d323aeb19c3824112cfa712cc122db3b4 Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 24 Jan 2024 10:27:20 -0500 Subject: cmUVProcessChain: Tolerate fileno() of invalid FILE stream On Windows, in a GUI process without a console, the `std{in,out,err}` standard FILE streams may not be open. Avoid passing an invalid file descriptor to the child process, and let libuv attach NUL instead. Fixes: #25625 --- Source/cmUVProcessChain.cxx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Source/cmUVProcessChain.cxx b/Source/cmUVProcessChain.cxx index 338abba..cd452cb 100644 --- a/Source/cmUVProcessChain.cxx +++ b/Source/cmUVProcessChain.cxx @@ -122,7 +122,11 @@ cmUVProcessChainBuilder& cmUVProcessChainBuilder::SetExternalStream( cmUVProcessChainBuilder& cmUVProcessChainBuilder::SetExternalStream( Stream stdio, FILE* stream) { - return this->SetExternalStream(stdio, cm_fileno(stream)); + int fd = cm_fileno(stream); + if (fd >= 0) { + return this->SetExternalStream(stdio, fd); + } + return this->SetNoStream(stdio); } cmUVProcessChainBuilder& cmUVProcessChainBuilder::SetMergedBuiltinStreams() -- cgit v0.12