diff options
Diffstat (limited to 'llvm/lib/Fuzzer/FuzzerDriver.cpp')
-rw-r--r-- | llvm/lib/Fuzzer/FuzzerDriver.cpp | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/llvm/lib/Fuzzer/FuzzerDriver.cpp b/llvm/lib/Fuzzer/FuzzerDriver.cpp index d432fe84370..4051bf680ff 100644 --- a/llvm/lib/Fuzzer/FuzzerDriver.cpp +++ b/llvm/lib/Fuzzer/FuzzerDriver.cpp @@ -219,8 +219,8 @@ static void WorkerThread(const std::string &Cmd, std::atomic<int> *Counter, } } -static std::string CloneArgsWithoutX(const std::vector<std::string> &Args, - const char *X1, const char *X2) { +std::string CloneArgsWithoutX(const std::vector<std::string> &Args, + const char *X1, const char *X2) { std::string Cmd; for (auto &S : Args) { if (FlagValue(S.c_str(), X1) || FlagValue(S.c_str(), X2)) @@ -230,11 +230,6 @@ static std::string CloneArgsWithoutX(const std::vector<std::string> &Args, return Cmd; } -static std::string CloneArgsWithoutX(const std::vector<std::string> &Args, - const char *X) { - return CloneArgsWithoutX(Args, X, X); -} - static int RunInMultipleProcesses(const std::vector<std::string> &Args, int NumWorkers, int NumJobs) { std::atomic<int> Counter(0); @@ -499,6 +494,16 @@ int FuzzerDriver(int *argc, char ***argv, UserCallback Callback) { exit(0); } + if (Flags.experimental_merge) { + if (Options.MaxLen == 0) + F->SetMaxInputLen(kMaxSaneLen); + if (Flags.merge_control_file) + F->CrashResistantMergeInternalStep(Flags.merge_control_file); + else + F->CrashResistantMerge(Args, *Inputs); + exit(0); + } + size_t TemporaryMaxLen = Options.MaxLen ? Options.MaxLen : kMaxSaneLen; UnitVector InitialCorpus; |