From fd50a2ebe13b5ae0f7f77d9f5955eebf5f9f6811 Mon Sep 17 00:00:00 2001 From: Kostya Serebryany Date: Tue, 12 Sep 2017 21:58:07 +0000 Subject: [libFuzzer] factor out some code into GetSizedFilesFromDir; NFC git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@313081 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/fuzzer/FuzzerIO.cpp | 9 +++++++++ lib/fuzzer/FuzzerIO.h | 8 ++++++++ lib/fuzzer/FuzzerLoop.cpp | 33 ++++++++++++++------------------- 3 files changed, 31 insertions(+), 19 deletions(-) (limited to 'lib/fuzzer') diff --git a/lib/fuzzer/FuzzerIO.cpp b/lib/fuzzer/FuzzerIO.cpp index b3adfacf3..dac5ec658 100644 --- a/lib/fuzzer/FuzzerIO.cpp +++ b/lib/fuzzer/FuzzerIO.cpp @@ -86,6 +86,15 @@ void ReadDirToVectorOfUnits(const char *Path, Vector *V, } } + +void GetSizedFilesFromDir(const std::string &Dir, Vector *V) { + Vector Files; + ListFilesInDirRecursive(Dir, 0, &Files, /*TopDir*/true); + for (auto &File : Files) + if (size_t Size = FileSize(File)) + V->push_back({File, Size}); +} + std::string DirPlusFile(const std::string &DirPath, const std::string &FileName) { return DirPath + GetSeparator() + FileName; diff --git a/lib/fuzzer/FuzzerIO.h b/lib/fuzzer/FuzzerIO.h index 5059c11ac..ea9f0d5a6 100644 --- a/lib/fuzzer/FuzzerIO.h +++ b/lib/fuzzer/FuzzerIO.h @@ -58,6 +58,14 @@ size_t FileSize(const std::string &Path); void ListFilesInDirRecursive(const std::string &Dir, long *Epoch, Vector *V, bool TopDir); +struct SizedFile { + std::string File; + size_t Size; + bool operator<(const SizedFile &B) const { return Size < B.Size; } +}; + +void GetSizedFilesFromDir(const std::string &Dir, Vector *V); + char GetSeparator(); FILE* OpenFile(int Fd, const char *Mode); diff --git a/lib/fuzzer/FuzzerLoop.cpp b/lib/fuzzer/FuzzerLoop.cpp index d6185fdee..ec126024e 100644 --- a/lib/fuzzer/FuzzerLoop.cpp +++ b/lib/fuzzer/FuzzerLoop.cpp @@ -597,26 +597,21 @@ void Fuzzer::MutateAndTestOne() { void Fuzzer::ReadAndExecuteSeedCorpora(const Vector &CorpusDirs) { const size_t kMaxSaneLen = 1 << 20; const size_t kMinDefaultLen = 4096; - struct SizedFile { - std::string File; - size_t Size; - }; Vector SizedFiles; size_t MaxSize = 0; size_t MinSize = -1; size_t TotalSize = 0; + size_t LastNumFiles = 0; for (auto &Dir : CorpusDirs) { - Vector Files; - ListFilesInDirRecursive(Dir, 0, &Files, /*TopDir*/true); - Printf("INFO: % 8zd files found in %s\n", Files.size(), Dir.c_str()); - for (auto &File : Files) { - if (size_t Size = FileSize(File)) { - MaxSize = Max(Size, MaxSize); - MinSize = Min(Size, MinSize); - TotalSize += Size; - SizedFiles.push_back({File, Size}); - } - } + GetSizedFilesFromDir(Dir, &SizedFiles); + Printf("INFO: % 8zd files found in %s\n", SizedFiles.size() - LastNumFiles, + Dir.c_str()); + LastNumFiles = SizedFiles.size(); + } + for (auto &File : SizedFiles) { + MaxSize = Max(File.Size, MaxSize); + MinSize = Min(File.Size, MinSize); + TotalSize += File.Size; } if (Options.MaxLen == 0) SetMaxInputLen(std::min(std::max(kMinDefaultLen, MaxSize), kMaxSaneLen)); @@ -633,10 +628,10 @@ void Fuzzer::ReadAndExecuteSeedCorpora(const Vector &CorpusDirs) { if (Options.ShuffleAtStartUp) std::shuffle(SizedFiles.begin(), SizedFiles.end(), MD.GetRand()); - if (Options.PreferSmall) - std::stable_sort( - SizedFiles.begin(), SizedFiles.end(), - [](const SizedFile &A, const SizedFile &B) { return A.Size < B.Size; }); + if (Options.PreferSmall) { + std::stable_sort(SizedFiles.begin(), SizedFiles.end()); + assert(SizedFiles.front().Size <= SizedFiles.back().Size); + } // Load and execute inputs one by one. for (auto &SF : SizedFiles) { -- cgit v1.2.3