summaryrefslogtreecommitdiffstats
path: root/compiler-rt/lib/fuzzer/FuzzerDriver.cpp
diff options
context:
space:
mode:
authorJonathan Metzman <metzman@chromium.org>2019-04-30 20:56:18 +0000
committerJonathan Metzman <metzman@chromium.org>2019-04-30 20:56:18 +0000
commitf3ee97731eb524e9c7bc6911c205a38e643dfff4 (patch)
tree4e2bb339020d1c0221c5d798cf91f01ab906108f /compiler-rt/lib/fuzzer/FuzzerDriver.cpp
parenteeae45dc77d227d0376e381708e5ece4760ededb (diff)
downloadbcm5719-llvm-f3ee97731eb524e9c7bc6911c205a38e643dfff4.tar.gz
bcm5719-llvm-f3ee97731eb524e9c7bc6911c205a38e643dfff4.zip
[libFuzzer] Replace -seed_corpus to better support fork mode on Win
Summary: Pass seed corpus list in a file to get around argument length limits on Windows. This limit was preventing many uses of fork mode on Windows. Reviewers: kcc, morehouse Reviewed By: kcc Subscribers: #sanitizers, llvm-commits Tags: #sanitizers, #llvm Differential Revision: https://reviews.llvm.org/D60980 llvm-svn: 359610
Diffstat (limited to 'compiler-rt/lib/fuzzer/FuzzerDriver.cpp')
-rw-r--r--compiler-rt/lib/fuzzer/FuzzerDriver.cpp23
1 files changed, 16 insertions, 7 deletions
diff --git a/compiler-rt/lib/fuzzer/FuzzerDriver.cpp b/compiler-rt/lib/fuzzer/FuzzerDriver.cpp
index a51ac9310fa..b9c89274703 100644
--- a/compiler-rt/lib/fuzzer/FuzzerDriver.cpp
+++ b/compiler-rt/lib/fuzzer/FuzzerDriver.cpp
@@ -763,16 +763,25 @@ int FuzzerDriver(int *argc, char ***argv, UserCallback Callback) {
exit(0);
}
- // Parse -seed_inputs=file1,file2,...
+ // Parse -seed_inputs=file1,file2,... or -seed_inputs=@seed_inputs_file
Vector<std::string> ExtraSeedFiles;
if (Flags.seed_inputs) {
- std::string s = Flags.seed_inputs;
- size_t comma_pos;
- while ((comma_pos = s.find_last_of(',')) != std::string::npos) {
- ExtraSeedFiles.push_back(s.substr(comma_pos + 1));
- s = s.substr(0, comma_pos);
+ std::string SeedInputs;
+ if (Flags.seed_inputs[0] == '@')
+ SeedInputs = FileToString(Flags.seed_inputs + 1); // File contains list.
+ else
+ SeedInputs = Flags.seed_inputs; // seed_inputs contains the list.
+ if (SeedInputs.empty()) {
+ Printf("seed_inputs is empty or @file does not exist.\n");
+ exit(1);
+ }
+ // Parse SeedInputs.
+ size_t comma_pos = 0;
+ while ((comma_pos = SeedInputs.find_last_of(',')) != std::string::npos) {
+ ExtraSeedFiles.push_back(SeedInputs.substr(comma_pos + 1));
+ SeedInputs = SeedInputs.substr(0, comma_pos);
}
- ExtraSeedFiles.push_back(s);
+ ExtraSeedFiles.push_back(SeedInputs);
}
F->Loop(*Inputs, ExtraSeedFiles);
OpenPOWER on IntegriCloud