For Windows, sanitizers work with Handles, not with posix file descriptors,
because they use the windows-specific API. So we need to convert the fds to
handles before passing them to the sanitizer library.
After this change, close_fd_mask is fixed for Windows (this fix some tests too).
Differential Revision: https://reviews.llvm.org/D29548
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@294388
91177308-0d34-0410-b5e6-
96231b3b80d8
if (NewOutputFile) {
OutputFile = NewOutputFile;
if (EF->__sanitizer_set_report_fd)
- EF->__sanitizer_set_report_fd(reinterpret_cast<void *>(OutputFd));
+ EF->__sanitizer_set_report_fd(
+ reinterpret_cast<void *>(GetHandleFromFd(OutputFd)));
DiscardOutput(2);
}
}
void DiscardOutput(int Fd);
+intptr_t GetHandleFromFd(int fd);
+
} // namespace fuzzer
#endif // LLVM_FUZZER_IO_H
fclose(Temp);
}
+intptr_t GetHandleFromFd(int fd) {
+ return static_cast<intptr_t>(fd);
+}
+
std::string DirName(const std::string &FileName) {
char *Tmp = new char[FileName.size() + 1];
memcpy(Tmp, FileName.c_str(), FileName.size() + 1);
fclose(Temp);
}
+intptr_t GetHandleFromFd(int fd) {
+ return _get_osfhandle(fd);
+}
+
static bool IsSeparator(char C) {
return C == '\\' || C == '/';
}