]> granicus.if.org Git - llvm/commitdiff
[libFuzzer] make sure that -reduce_inputs=1 deletes redundant files in the corpus
authorKostya Serebryany <kcc@google.com>
Thu, 13 Jul 2017 01:56:37 +0000 (01:56 +0000)
committerKostya Serebryany <kcc@google.com>
Thu, 13 Jul 2017 01:56:37 +0000 (01:56 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@307875 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Fuzzer/FuzzerCorpus.h
lib/Fuzzer/test/reduce_inputs.test

index c4d1db74014f57d515262adac369b56d669b130d..218ae5b6ac4d405b72e5e70ad694921c97ff2b5e 100644 (file)
@@ -139,6 +139,9 @@ class InputCorpus {
   }
 
   void Replace(InputInfo *II, const Unit &U) {
+    assert(II->U.size());
+    Hashes.erase(Sha1ToString(II->Sha1));
+    DeleteFile(*II);
     ComputeSHA1(U.data(), U.size(), II->Sha1);
     Hashes.insert(Sha1ToString(II->Sha1));
     II->U = U;
@@ -182,10 +185,14 @@ class InputCorpus {
     Printf("\n");
   }
 
-  void DeleteInput(size_t Idx) {
-    InputInfo &II = *Inputs[Idx];
+  void DeleteFile(const InputInfo &II) {
     if (!OutputCorpus.empty() && II.MayDeleteFile)
       RemoveFile(DirPlusFile(OutputCorpus, Sha1ToString(II.Sha1)));
+  }
+
+  void DeleteInput(size_t Idx) {
+    InputInfo &II = *Inputs[Idx];
+    DeleteFile(II);
     Unit().swap(II.U);
     if (FeatureDebug)
       Printf("EVICTED %zd\n", Idx);
index cc803d789d89bd8600c1c9981868b1f6ef0c06e3..a4a5c57123d3f038702f1f01bb34b3e9e07452b3 100644 (file)
@@ -1,2 +1,13 @@
+# Test -reduce_inputs=1
+
+RUN: rm -rf %t/C
+RUN: mkdir -p %t/C
+RUN: LLVMFuzzer-ShrinkControlFlowSimpleTest  -exit_on_item=0eb8e4ed029b774d80f2b66408203801cb982a60   -reduce_inputs=1 -runs=1000000 %t/C 2>&1 | FileCheck %s
 CHECK: INFO: found item with checksum '0eb8e4ed029b774d80f2b66408203801cb982a60'
-RUN: LLVMFuzzer-ShrinkControlFlowSimpleTest  -exit_on_item=0eb8e4ed029b774d80f2b66408203801cb982a60   -reduce_inputs=1 -runs=1000000 2>&1 | FileCheck %s
+
+# Test that reduce_inputs deletes redundant files in the corpus.
+RUN: LLVMFuzzer-ShrinkControlFlowSimpleTest -runs=0 %t/C 2>&1 | FileCheck %s --check-prefix=COUNT
+COUNT: READ units: 3
+
+
+