[llvm] r289467 - [libFuzzer] respect -max_len during merge

Kostya Serebryany via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 12 12:39:36 PST 2016


Author: kcc
Date: Mon Dec 12 14:39:35 2016
New Revision: 289467

URL: http://llvm.org/viewvc/llvm-project?rev=289467&view=rev
Log:
[libFuzzer] respect -max_len during merge

Modified:
    llvm/trunk/lib/Fuzzer/FuzzerLoop.cpp
    llvm/trunk/lib/Fuzzer/FuzzerMerge.cpp
    llvm/trunk/lib/Fuzzer/test/merge.test

Modified: llvm/trunk/lib/Fuzzer/FuzzerLoop.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Fuzzer/FuzzerLoop.cpp?rev=289467&r1=289466&r2=289467&view=diff
==============================================================================
--- llvm/trunk/lib/Fuzzer/FuzzerLoop.cpp (original)
+++ llvm/trunk/lib/Fuzzer/FuzzerLoop.cpp Mon Dec 12 14:39:35 2016
@@ -638,7 +638,8 @@ void Fuzzer::Merge(const std::vector<std
 
   assert(MaxInputLen > 0);
   UnitVector Initial, Extra;
-  ReadDirToVectorOfUnits(Corpora[0].c_str(), &Initial, nullptr, MaxInputLen, true);
+  ReadDirToVectorOfUnits(Corpora[0].c_str(), &Initial, nullptr, MaxInputLen,
+                         true);
   for (auto &C : ExtraCorpora)
     ReadDirToVectorOfUnits(C.c_str(), &Extra, nullptr, MaxInputLen, true);
 

Modified: llvm/trunk/lib/Fuzzer/FuzzerMerge.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Fuzzer/FuzzerMerge.cpp?rev=289467&r1=289466&r2=289467&view=diff
==============================================================================
--- llvm/trunk/lib/Fuzzer/FuzzerMerge.cpp (original)
+++ llvm/trunk/lib/Fuzzer/FuzzerMerge.cpp Mon Dec 12 14:39:35 2016
@@ -175,6 +175,10 @@ void Fuzzer::CrashResistantMergeInternal
   std::ofstream OF(CFPath, std::ofstream::out | std::ofstream::app);
   for (size_t i = M.FirstNotProcessedFile; i < M.Files.size(); i++) {
     auto U = FileToVector(M.Files[i].Name);
+    if (U.size() > Options.MaxLen) {
+      U.resize(Options.MaxLen);
+      U.shrink_to_fit();
+    }
     std::ostringstream StartedLine;
     // Write the pre-run marker.
     OF << "STARTED " << std::dec << i << " " << U.size() << "\n";

Modified: llvm/trunk/lib/Fuzzer/test/merge.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Fuzzer/test/merge.test?rev=289467&r1=289466&r2=289467&view=diff
==============================================================================
--- llvm/trunk/lib/Fuzzer/test/merge.test (original)
+++ llvm/trunk/lib/Fuzzer/test/merge.test Mon Dec 12 14:39:35 2016
@@ -29,6 +29,8 @@ RUN: LLVMFuzzer-FullCoverageSetTest
 CHECK3: === Minimizing the initial corpus of 6 units
 CHECK3: === Merge: written 0 units
 
+# Check that we respect max_len during the merge and don't crash.
+RUN: LLVMFuzzer-FullCoverageSetTest         -merge=1 %tmp/T1 %tmp/T2 -max_len=4
 
 # Check that when merge fails we print an error message.
 RUN: echo 'Hi!' > %tmp/T1/HiI




More information about the llvm-commits mailing list