summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKostya Serebryany <kcc@google.com>2019-02-16 01:23:41 +0000
committerKostya Serebryany <kcc@google.com>2019-02-16 01:23:41 +0000
commitb6ca1e72594a3b79fbe37cd2e70f531c448f3e76 (patch)
tree2e87c51af15fc6d3002b37453a341755a1ccc28f
parenteac7c3ffaf5df3f61e5379cd3f61dc68a8414d67 (diff)
downloadbcm5719-llvm-b6ca1e72594a3b79fbe37cd2e70f531c448f3e76.tar.gz
bcm5719-llvm-b6ca1e72594a3b79fbe37cd2e70f531c448f3e76.zip
[libFuzzer] make len_control less agressive: set the initial max len to the length of the largest seed. This was the original intent, but... Now, with a test, to ensure it stays this way
llvm-svn: 354191
-rw-r--r--compiler-rt/lib/fuzzer/FuzzerLoop.cpp6
-rw-r--r--compiler-rt/test/fuzzer/len_control.test11
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
+
OpenPOWER on IntegriCloud