diff options
-rw-r--r-- | compiler-rt/lib/fuzzer/FuzzerLoop.cpp | 6 | ||||
-rw-r--r-- | compiler-rt/test/fuzzer/len_control.test | 11 |
2 files changed, 16 insertions, 1 deletions
diff --git a/compiler-rt/lib/fuzzer/FuzzerLoop.cpp b/compiler-rt/lib/fuzzer/FuzzerLoop.cpp index 75dc600870a..b86512b1255 100644 --- a/compiler-rt/lib/fuzzer/FuzzerLoop.cpp +++ b/compiler-rt/lib/fuzzer/FuzzerLoop.cpp @@ -153,7 +153,7 @@ Fuzzer::Fuzzer(UserCallback CB, InputCorpus &Corpus, MutationDispatcher &MD, if (!Options.OutputCorpus.empty() && Options.ReloadIntervalSec) EpochOfLastReadOfOutputCorpus = GetEpoch(Options.OutputCorpus); MaxInputLen = MaxMutationLen = Options.MaxLen; - TmpMaxMutationLen = Max(size_t(4), Corpus.MaxInputSize()); + TmpMaxMutationLen = 0; // Will be set once we load the corpus. AllocateCurrentUnitData(); CurrentUnitSize = 0; memset(BaseSha1, 0, sizeof(BaseSha1)); @@ -781,6 +781,10 @@ void Fuzzer::Loop(const Vector<std::string> &CorpusDirs, TPC.SetPrintNewPCs(Options.PrintNewCovPcs); TPC.SetPrintNewFuncs(Options.PrintNewCovFuncs); system_clock::time_point LastCorpusReload = system_clock::now(); + + TmpMaxMutationLen = + Min(MaxMutationLen, Max(size_t(4), Corpus.MaxInputSize())); + while (true) { auto Now = system_clock::now(); if (duration_cast<seconds>(Now - LastCorpusReload).count() >= diff --git a/compiler-rt/test/fuzzer/len_control.test b/compiler-rt/test/fuzzer/len_control.test new file mode 100644 index 00000000000..189ad36033e --- /dev/null +++ b/compiler-rt/test/fuzzer/len_control.test @@ -0,0 +1,11 @@ +# Tests len_control +RUN: %cpp_compiler %S/SimpleTest.cpp -o %t-SimpleTest + +LIM4: DONE{{.*}}lim: 4 +LIM77: DONE{{.*}}lim: 77 +LIM20: DONE{{.*}}lim: 20 +RUN: %run %t-SimpleTest -runs=1 2>&1 | FileCheck %s --check-prefix=LIM4 +RUN: %run %t-SimpleTest -seed_inputs=%t-SimpleTest -max_len=77 -runs=1 2>&1 | FileCheck %s --check-prefix=LIM77 +RUN: echo -n 01234567890123456789 > %t-temp +RUN: %run %t-SimpleTest -seed_inputs=%t-temp -runs=1 2>&1 | FileCheck %s --check-prefix=LIM20 + |