[llvm] r250564 - [libFuzzer] When -test_single_input crashes the test it is not necessary to write crash-file because input is already known to the user. Patch by Mike Aizatsky
Kostya Serebryany via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 16 15:41:48 PDT 2015
Author: kcc
Date: Fri Oct 16 17:41:47 2015
New Revision: 250564
URL: http://llvm.org/viewvc/llvm-project?rev=250564&view=rev
Log:
[libFuzzer] When -test_single_input crashes the test it is not necessary to write crash-file because input is already known to the user. Patch by Mike Aizatsky
Modified:
llvm/trunk/lib/Fuzzer/FuzzerDriver.cpp
llvm/trunk/lib/Fuzzer/FuzzerIO.cpp
llvm/trunk/lib/Fuzzer/FuzzerInternal.h
llvm/trunk/lib/Fuzzer/FuzzerLoop.cpp
llvm/trunk/lib/Fuzzer/test/fuzzer.test
Modified: llvm/trunk/lib/Fuzzer/FuzzerDriver.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Fuzzer/FuzzerDriver.cpp?rev=250564&r1=250563&r2=250564&view=diff
==============================================================================
--- llvm/trunk/lib/Fuzzer/FuzzerDriver.cpp (original)
+++ llvm/trunk/lib/Fuzzer/FuzzerDriver.cpp Fri Oct 16 17:41:47 2015
@@ -277,12 +277,17 @@ int FuzzerDriver(const std::vector<std::
return 1;
if (Flags.verbosity > 0 && !Options.Dictionary.empty())
Printf("Dictionary: %zd entries\n", Options.Dictionary.size());
+ Options.SaveArtifacts = !Flags.test_single_input;
Fuzzer F(USF, Options);
if (Flags.apply_tokens)
return ApplyTokens(F, Flags.apply_tokens);
+ // Timer
+ if (Flags.timeout > 0)
+ SetTimer(Flags.timeout / 2 + 1);
+
if (Flags.test_single_input)
return RunOneTest(&F, Flags.test_single_input);
@@ -294,10 +299,6 @@ int FuzzerDriver(const std::vector<std::
Printf("Seed: %u\n", Seed);
USF.GetRand().ResetSeed(Seed);
- // Timer
- if (Flags.timeout > 0)
- SetTimer(Flags.timeout / 2 + 1);
-
if (Flags.verbosity >= 2) {
Printf("Tokens: {");
for (auto &T : Options.Tokens)
Modified: llvm/trunk/lib/Fuzzer/FuzzerIO.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Fuzzer/FuzzerIO.cpp?rev=250564&r1=250563&r2=250564&view=diff
==============================================================================
--- llvm/trunk/lib/Fuzzer/FuzzerIO.cpp (original)
+++ llvm/trunk/lib/Fuzzer/FuzzerIO.cpp Fri Oct 16 17:41:47 2015
@@ -49,6 +49,10 @@ static std::vector<std::string> ListFile
Unit FileToVector(const std::string &Path) {
std::ifstream T(Path);
+ if (!T) {
+ Printf("No such directory: %s; exiting\n", Path.c_str());
+ exit(1);
+ }
return Unit((std::istreambuf_iterator<char>(T)),
std::istreambuf_iterator<char>());
}
Modified: llvm/trunk/lib/Fuzzer/FuzzerInternal.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Fuzzer/FuzzerInternal.h?rev=250564&r1=250563&r2=250564&view=diff
==============================================================================
--- llvm/trunk/lib/Fuzzer/FuzzerInternal.h (original)
+++ llvm/trunk/lib/Fuzzer/FuzzerInternal.h Fri Oct 16 17:41:47 2015
@@ -93,6 +93,7 @@ class Fuzzer {
std::string ArtifactPrefix = "./";
std::vector<std::string> Tokens;
std::vector<Unit> Dictionary;
+ bool SaveArtifacts = true;
};
Fuzzer(UserSuppliedFuzzer &USF, FuzzingOptions Options);
void AddToCorpus(const Unit &U) { Corpus.push_back(U); }
Modified: llvm/trunk/lib/Fuzzer/FuzzerLoop.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Fuzzer/FuzzerLoop.cpp?rev=250564&r1=250563&r2=250564&view=diff
==============================================================================
--- llvm/trunk/lib/Fuzzer/FuzzerLoop.cpp (original)
+++ llvm/trunk/lib/Fuzzer/FuzzerLoop.cpp Fri Oct 16 17:41:47 2015
@@ -237,6 +237,8 @@ void Fuzzer::WriteToOutputCorpus(const U
}
void Fuzzer::WriteUnitToFileWithPrefix(const Unit &U, const char *Prefix) {
+ if (!Options.SaveArtifacts)
+ return;
std::string Path = Options.ArtifactPrefix + Prefix + Hash(U);
WriteToFile(U, Path);
Printf("artifact_prefix='%s'; Test unit written to %s\n",
Modified: llvm/trunk/lib/Fuzzer/test/fuzzer.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Fuzzer/test/fuzzer.test?rev=250564&r1=250563&r2=250564&view=diff
==============================================================================
--- llvm/trunk/lib/Fuzzer/test/fuzzer.test (original)
+++ llvm/trunk/lib/Fuzzer/test/fuzzer.test Fri Oct 16 17:41:47 2015
@@ -1,7 +1,8 @@
CHECK: BINGO
RUN: LLVMFuzzer-SimpleTest 2>&1 | FileCheck %s
-RUN: LLVMFuzzer-SimpleTest -test_single_input=%S/hi.txt 2>&1 | FileCheck %s
+RUN: not LLVMFuzzer-NullDerefTest -test_single_input=%S/hi.txt 2>&1 | FileCheck %s --check-prefix=SingleInput
+SingleInput-NOT: Test unit written to ./crash-
RUN: not LLVMFuzzer-InfiniteTest -timeout=2 2>&1 | FileCheck %s --check-prefix=InfiniteTest
InfiniteTest: ALARM: working on the last Unit for
@@ -14,6 +15,10 @@ RUN: not LLVMFuzzer-TimeoutTest -timeout
TimeoutTest: ALARM: working on the last Unit for
TimeoutTest: Test unit written to ./timeout-
+RUN: not LLVMFuzzer-TimeoutTest -timeout=5 -test_single_input=%S/hi.txt 2>&1 | FileCheck %s --check-prefix=SingleInputTimeoutTest
+SingleInputTimeoutTest: ALARM: working on the last Unit for
+SingleInputTimeoutTest-NOT: Test unit written to ./timeout-
+
RUN: not LLVMFuzzer-NullDerefTest 2>&1 | FileCheck %s --check-prefix=NullDerefTest
NullDerefTest: Test unit written to ./crash-
RUN: not LLVMFuzzer-NullDerefTest -artifact_prefix=ZZZ 2>&1 | FileCheck %s --check-prefix=NullDerefTestPrefix
More information about the llvm-commits
mailing list