Index: lib/Fuzzer/FuzzerDriver.cpp =================================================================== --- lib/Fuzzer/FuzzerDriver.cpp +++ lib/Fuzzer/FuzzerDriver.cpp @@ -371,8 +371,12 @@ if (Flags.minimize_crash) return MinimizeCrashInput(Args); - if (Flags.close_fd_mask & 2) - DupAndCloseStderr(); + if (Flags.close_fd_mask & 2) { + int FD = DupAndCloseStderr(); + if (FD > 0 && EF->__sanitizer_set_report_fd) + EF->__sanitizer_set_report_fd(reinterpret_cast(FD)); + } + if (Flags.close_fd_mask & 1) CloseStdout(); Index: lib/Fuzzer/Support/UtilIO.h =================================================================== --- lib/Fuzzer/Support/UtilIO.h +++ lib/Fuzzer/Support/UtilIO.h @@ -40,7 +40,7 @@ // Returns the name of the dir, similar to the 'dirname' utility. std::string DirName(const std::string &FileName); -void DupAndCloseStderr(); +int DupAndCloseStderr(); void CloseStdout(); Index: lib/Fuzzer/Support/UtilIO.cpp =================================================================== --- lib/Fuzzer/Support/UtilIO.cpp +++ lib/Fuzzer/Support/UtilIO.cpp @@ -10,8 +10,6 @@ //===----------------------------------------------------------------------===// #include "UtilIO.h" -#include "FuzzerDefs.h" -#include "FuzzerExtFunctions.h" #include #include #include @@ -89,17 +87,16 @@ return DirPath + GetSeparator() + FileName; } -void DupAndCloseStderr() { +int DupAndCloseStderr() { int OutputFd = DuplicateFile(2); if (OutputFd > 0) { FILE *NewOutputFile = OpenFile(OutputFd, "w"); if (NewOutputFile) { OutputFile = NewOutputFile; - if (EF->__sanitizer_set_report_fd) - EF->__sanitizer_set_report_fd(reinterpret_cast(OutputFd)); CloseFile(2); } } + return OutputFd; } void CloseStdout() {