#include <string>
#include <vector>
#include <unordered_set>
-#include <set>
#include "FuzzerInterface.h"
size_t TotalNumberOfRuns = 0;
std::vector<Unit> Corpus;
- std::set<Unit> UnitsAddedAfterInitialLoad;
+ std::unordered_set<std::string> UnitHashesAddedToCorpus;
std::unordered_set<uintptr_t> FullCoverageSets;
std::unordered_set<uint64_t> CoveragePairs;
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);
+ }
}
}
}
}
}
Corpus = NewCorpus;
+ for (auto &X : Corpus)
+ UnitHashesAddedToCorpus.insert(Hash(X));
PrintStats("INITED", MaxCov);
}
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();
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