From 6b302b9e61388cd7601503b0ff9ceca80c522df2 Mon Sep 17 00:00:00 2001 From: Varun Khaneja Date: Fri, 17 Nov 2017 14:47:43 -0800 Subject: [PATCH] Use same filename for the input file created in disk (#994) * Use the same file name always to avoid creating new files * Minor: formatting changes * Use PID for the filename --- projects/unrar/unrar_fuzzer.cc | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/projects/unrar/unrar_fuzzer.cc b/projects/unrar/unrar_fuzzer.cc index f19b53a5a..084aa6a8f 100644 --- a/projects/unrar/unrar_fuzzer.cc +++ b/projects/unrar/unrar_fuzzer.cc @@ -1,20 +1,27 @@ +#include #include -#include -#include +#include #include #include "rar.hpp" extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { - char filename[] = "mytemp.XXXXXX"; - int fd = mkstemp(filename); - write(fd, data, size); + std::stringstream ss; + ss << "temp-" << getpid() << ".rar"; + static const std::string filename = ss.str(); + std::ofstream file(filename, + std::ios::binary | std::ios::out | std::ios::trunc); + if (!file.is_open()) { + return 0; + } + file.write(reinterpret_cast(data), size); + file.close(); std::unique_ptr cmd_data(new CommandData); cmd_data->ParseArg(const_cast(L"-p")); cmd_data->ParseArg(const_cast(L"x")); cmd_data->ParseDone(); - std::wstring wide_filename(filename, filename + strlen(filename)); + std::wstring wide_filename(filename.begin(), filename.end()); cmd_data->AddArcName(wide_filename.c_str()); try { @@ -23,8 +30,7 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { } catch (...) { } - close(fd); - unlink(filename); + unlink(filename.c_str()); return 0; }