From 3b3cbed1b03f6c16e5ee962100bac1301f944214 Mon Sep 17 00:00:00 2001 From: Kostya Serebryany Date: Tue, 19 May 2015 01:06:07 +0000 Subject: [PATCH] [lib/Fuzzer] more efficient reload logic; also don't spam git too much git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@237649 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Fuzzer/FuzzerInternal.h | 3 +-- lib/Fuzzer/FuzzerLoop.cpp | 14 +++++++++----- lib/Fuzzer/pull_and_push_fuzz_corpus.sh | 2 +- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/lib/Fuzzer/FuzzerInternal.h b/lib/Fuzzer/FuzzerInternal.h index 8d6193e9a22..80a2fc31c3a 100644 --- a/lib/Fuzzer/FuzzerInternal.h +++ b/lib/Fuzzer/FuzzerInternal.h @@ -16,7 +16,6 @@ #include #include #include -#include #include "FuzzerInterface.h" @@ -132,7 +131,7 @@ class Fuzzer { size_t TotalNumberOfRuns = 0; std::vector Corpus; - std::set UnitsAddedAfterInitialLoad; + std::unordered_set UnitHashesAddedToCorpus; std::unordered_set FullCoverageSets; std::unordered_set CoveragePairs; diff --git a/lib/Fuzzer/FuzzerLoop.cpp b/lib/Fuzzer/FuzzerLoop.cpp index 3a80d0d7e23..be1e9730e34 100644 --- a/lib/Fuzzer/FuzzerLoop.cpp +++ b/lib/Fuzzer/FuzzerLoop.cpp @@ -99,13 +99,15 @@ void Fuzzer::RereadOutputCorpus() { for (auto &X : AdditionalCorpus) { if (X.size() > (size_t)Options.MaxLen) X.resize(Options.MaxLen); - if (UnitsAddedAfterInitialLoad.insert(X).second) { - Corpus.push_back(X); + if (UnitHashesAddedToCorpus.insert(Hash(X)).second) { CurrentUnit.clear(); CurrentUnit.insert(CurrentUnit.begin(), X.begin(), X.end()); size_t NewCoverage = RunOne(CurrentUnit); - if (NewCoverage && Options.Verbosity >= 1) - PrintStats("RELOAD", NewCoverage); + if (NewCoverage) { + Corpus.push_back(X); + if (Options.Verbosity >= 1) + PrintStats("RELOAD", NewCoverage); + } } } } @@ -142,6 +144,8 @@ void Fuzzer::ShuffleAndMinimize() { } } Corpus = NewCorpus; + for (auto &X : Corpus) + UnitHashesAddedToCorpus.insert(Hash(X)); PrintStats("INITED", MaxCov); } @@ -292,7 +296,7 @@ void Fuzzer::SaveCorpus() { void Fuzzer::ReportNewCoverage(size_t NewCoverage, const Unit &U) { if (!NewCoverage) return; Corpus.push_back(U); - UnitsAddedAfterInitialLoad.insert(U); + UnitHashesAddedToCorpus.insert(Hash(U)); PrintStats("NEW ", NewCoverage, ""); if (Options.Verbosity) { std::cerr << " L: " << U.size(); diff --git a/lib/Fuzzer/pull_and_push_fuzz_corpus.sh b/lib/Fuzzer/pull_and_push_fuzz_corpus.sh index 6c67cf0e0c6..bd564e3dfe5 100755 --- a/lib/Fuzzer/pull_and_push_fuzz_corpus.sh +++ b/lib/Fuzzer/pull_and_push_fuzz_corpus.sh @@ -9,7 +9,7 @@ cd $1 git add * git commit -m "fuzz test corpus" git pull --no-edit -for((attempt=0; attempt<100; attempt++)); do +for((attempt=0; attempt<5; attempt++)); do echo GIT PUSH $1 ATTEMPT $attempt if $(git push); then break; fi git pull --no-edit -- 2.34.1