summaryrefslogtreecommitdiff
path: root/lib/fuzzer/FuzzerLoop.cpp
diff options
context:
space:
mode:
authorKostya Serebryany <kcc@google.com>2017-09-12 21:58:07 +0000
committerKostya Serebryany <kcc@google.com>2017-09-12 21:58:07 +0000
commitfd50a2ebe13b5ae0f7f77d9f5955eebf5f9f6811 (patch)
tree3013a5cbc106e85791f38b8a6e0429ff50c5d537 /lib/fuzzer/FuzzerLoop.cpp
parent45735bcdc31ea2cb1e56eea5dd84189139c78eef (diff)
[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
Diffstat (limited to 'lib/fuzzer/FuzzerLoop.cpp')
-rw-r--r--lib/fuzzer/FuzzerLoop.cpp33
1 files changed, 14 insertions, 19 deletions
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<std::string> &CorpusDirs) {
const size_t kMaxSaneLen = 1 << 20;
const size_t kMinDefaultLen = 4096;
- struct SizedFile {
- std::string File;
- size_t Size;
- };
Vector<SizedFile> SizedFiles;
size_t MaxSize = 0;
size_t MinSize = -1;
size_t TotalSize = 0;
+ size_t LastNumFiles = 0;
for (auto &Dir : CorpusDirs) {
- Vector<std::string> 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<std::string> &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) {