diff options
author | Kostya Serebryany <kcc@google.com> | 2015-02-04 22:20:09 +0000 |
---|---|---|
committer | Kostya Serebryany <kcc@google.com> | 2015-02-04 22:20:09 +0000 |
commit | 33f866922a4302bba872b922520b88574bc9ea93 (patch) | |
tree | f7220ea4671e9a0212e1184451b589cf60ae70ef /llvm/lib/Fuzzer/FuzzerLoop.cpp | |
parent | 2f09c46f807c99a69c1a5a2a2f75fc1bcc76d7d5 (diff) | |
download | bcm5719-llvm-33f866922a4302bba872b922520b88574bc9ea93.tar.gz bcm5719-llvm-33f866922a4302bba872b922520b88574bc9ea93.zip |
[fuzzer] add -runs=N to limit the number of runs per session. Also, make sure we do some mutations w/o cross over.
llvm-svn: 228214
Diffstat (limited to 'llvm/lib/Fuzzer/FuzzerLoop.cpp')
-rw-r--r-- | llvm/lib/Fuzzer/FuzzerLoop.cpp | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/llvm/lib/Fuzzer/FuzzerLoop.cpp b/llvm/lib/Fuzzer/FuzzerLoop.cpp index 04285895181..d825148c758 100644 --- a/llvm/lib/Fuzzer/FuzzerLoop.cpp +++ b/llvm/lib/Fuzzer/FuzzerLoop.cpp @@ -147,6 +147,8 @@ void Fuzzer::SaveCorpus() { size_t Fuzzer::MutateAndTestOne(Unit *U) { size_t NewUnits = 0; for (int i = 0; i < Options.MutateDepth; i++) { + if (TotalNumberOfRuns >= Options.MaxNumberOfRuns) + return NewUnits; Mutate(U, Options.MaxLen); size_t NewCoverage = RunOne(*U); if (NewCoverage) { @@ -177,19 +179,20 @@ size_t Fuzzer::MutateAndTestOne(Unit *U) { size_t Fuzzer::Loop(size_t NumIterations) { size_t NewUnits = 0; for (size_t i = 1; i <= NumIterations; i++) { - if (Options.DoCrossOver) { - for (size_t J1 = 0; J1 < Corpus.size(); J1++) { + for (size_t J1 = 0; J1 < Corpus.size(); J1++) { + if (TotalNumberOfRuns >= Options.MaxNumberOfRuns) + return NewUnits; + // First, simply mutate the unit w/o doing crosses. + CurrentUnit = Corpus[J1]; + NewUnits += MutateAndTestOne(&CurrentUnit); + // Now, cross with others. + if (Options.DoCrossOver) { for (size_t J2 = 0; J2 < Corpus.size(); J2++) { CurrentUnit.clear(); CrossOver(Corpus[J1], Corpus[J2], &CurrentUnit, Options.MaxLen); NewUnits += MutateAndTestOne(&CurrentUnit); } } - } else { // No CrossOver - for (size_t J = 0; J < Corpus.size(); J++) { - CurrentUnit = Corpus[J]; - NewUnits += MutateAndTestOne(&CurrentUnit); - } } } return NewUnits; |