Skip to content

Commit 4c7353c

Browse files
committed
[libFuzzer] code refactoring; NFC
llvm-svn: 360400
1 parent da96d92 commit 4c7353c

File tree

5 files changed

+45
-45
lines changed

5 files changed

+45
-45
lines changed

compiler-rt/lib/fuzzer/FuzzerDataFlowTrace.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -197,10 +197,8 @@ void DataFlowTrace::Init(const std::string &DirPath,
197197
}
198198

199199
int CollectDataFlow(const std::string &DFTBinary, const std::string &DirPath,
200-
const Vector<std::string> &CorpusDirs,
201-
const Vector<std::string> &ExtraSeeds) {
202-
Printf("INFO: collecting data flow. DFTBinary: %s DirPath: %s\n",
203-
DFTBinary.c_str(), DirPath.c_str());
200+
const Vector<SizedFile> &CorporaFiles) {
201+
Printf("INFO: collecting data flow for %zd files\n", CorporaFiles.size());
204202
return 0;
205203
}
206204

compiler-rt/lib/fuzzer/FuzzerDataFlowTrace.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#define LLVM_FUZZER_DATA_FLOW_TRACE
3030

3131
#include "FuzzerDefs.h"
32+
#include "FuzzerIO.h"
3233

3334
#include <unordered_map>
3435
#include <vector>
@@ -37,8 +38,7 @@
3738
namespace fuzzer {
3839

3940
int CollectDataFlow(const std::string &DFTBinary, const std::string &DirPath,
40-
const Vector<std::string> &CorpusDirs,
41-
const Vector<std::string> &ExtraSeeds);
41+
const Vector<SizedFile> &CorporaFiles);
4242

4343
class BlockCoverage {
4444
public:

compiler-rt/lib/fuzzer/FuzzerDriver.cpp

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -584,6 +584,22 @@ Vector<std::string> ParseSeedInuts(const char *seed_inputs) {
584584
return Files;
585585
}
586586

587+
static Vector<SizedFile> ReadCorpora(const Vector<std::string> &CorpusDirs,
588+
const Vector<std::string> &ExtraSeedFiles) {
589+
Vector<SizedFile> SizedFiles;
590+
size_t LastNumFiles = 0;
591+
for (auto &Dir : CorpusDirs) {
592+
GetSizedFilesFromDir(Dir, &SizedFiles);
593+
Printf("INFO: % 8zd files found in %s\n", SizedFiles.size() - LastNumFiles,
594+
Dir.c_str());
595+
LastNumFiles = SizedFiles.size();
596+
}
597+
for (auto &File : ExtraSeedFiles)
598+
if (auto Size = FileSize(File))
599+
SizedFiles.push_back({File, Size});
600+
return SizedFiles;
601+
}
602+
587603
int FuzzerDriver(int *argc, char ***argv, UserCallback Callback) {
588604
using namespace fuzzer;
589605
assert(argc && argv && "Argument pointers cannot be nullptr");
@@ -666,9 +682,9 @@ int FuzzerDriver(int *argc, char ***argv, UserCallback Callback) {
666682
return 1;
667683
if (Flags.verbosity > 0 && !Dictionary.empty())
668684
Printf("Dictionary: %zd entries\n", Dictionary.size());
669-
bool DoPlainRun = AllInputsAreFiles();
685+
bool RunIndividualFiles = AllInputsAreFiles();
670686
Options.SaveArtifacts =
671-
!DoPlainRun || Flags.minimize_crash_internal_step;
687+
!RunIndividualFiles || Flags.minimize_crash_internal_step;
672688
Options.PrintNewCovPcs = Flags.print_pcs;
673689
Options.PrintNewCovFuncs = Flags.print_funcs;
674690
Options.PrintFinalStats = Flags.print_final_stats;
@@ -686,8 +702,6 @@ int FuzzerDriver(int *argc, char ***argv, UserCallback Callback) {
686702
Options.FeaturesDir = Flags.features_dir;
687703
Options.LazyCounters = Flags.lazy_counters;
688704

689-
auto ExtraSeedFiles = ParseSeedInuts(Flags.seed_inputs);
690-
691705
unsigned Seed = Flags.seed;
692706
// Initialize Seed.
693707
if (Seed == 0)
@@ -696,9 +710,14 @@ int FuzzerDriver(int *argc, char ***argv, UserCallback Callback) {
696710
if (Flags.verbosity)
697711
Printf("INFO: Seed: %u\n", Seed);
698712

699-
if (Flags.collect_data_flow)
700-
return CollectDataFlow(Flags.collect_data_flow, Flags.data_flow_trace,
701-
*Inputs, ExtraSeedFiles);
713+
if (Flags.collect_data_flow) {
714+
if (RunIndividualFiles)
715+
return CollectDataFlow(Flags.collect_data_flow, Flags.data_flow_trace,
716+
ReadCorpora({}, *Inputs));
717+
else
718+
return CollectDataFlow(Flags.collect_data_flow, Flags.data_flow_trace,
719+
ReadCorpora(*Inputs, {}));
720+
}
702721

703722
Random Rand(Seed);
704723
auto *MD = new MutationDispatcher(Rand, Options);
@@ -734,7 +753,7 @@ int FuzzerDriver(int *argc, char ***argv, UserCallback Callback) {
734753
if (Flags.cleanse_crash)
735754
return CleanseCrashInput(Args, Options);
736755

737-
if (DoPlainRun) {
756+
if (RunIndividualFiles) {
738757
Options.SaveArtifacts = false;
739758
int Runs = std::max(1, Flags.runs);
740759
Printf("%s: Running %zd inputs %d time(s) each.\n", ProgName->c_str(),
@@ -792,7 +811,8 @@ int FuzzerDriver(int *argc, char ***argv, UserCallback Callback) {
792811
exit(0);
793812
}
794813

795-
F->Loop(*Inputs, ExtraSeedFiles);
814+
auto CorporaFiles = ReadCorpora(*Inputs, ParseSeedInuts(Flags.seed_inputs));
815+
F->Loop(CorporaFiles);
796816

797817
if (Flags.verbosity)
798818
Printf("Done %zd runs in %zd second(s)\n", F->getTotalNumberOfRuns(),

compiler-rt/lib/fuzzer/FuzzerInternal.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,8 @@ class Fuzzer {
3535
Fuzzer(UserCallback CB, InputCorpus &Corpus, MutationDispatcher &MD,
3636
FuzzingOptions Options);
3737
~Fuzzer();
38-
void Loop(const Vector<std::string> &CorpusDirs,
39-
const Vector<std::string> &ExtraSeedFiles);
40-
void ReadAndExecuteSeedCorpora(const Vector<std::string> &CorpusDirs,
41-
const Vector<std::string> &ExtraSeedFiles);
38+
void Loop(Vector<SizedFile> &CorporaFiles);
39+
void ReadAndExecuteSeedCorpora(Vector<SizedFile> &CorporaFiles);
4240
void MinimizeCrashLoop(const Unit &U);
4341
void RereadOutputCorpus(size_t MaxSize);
4442

compiler-rt/lib/fuzzer/FuzzerLoop.cpp

Lines changed: 10 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -723,28 +723,13 @@ void Fuzzer::PurgeAllocator() {
723723
LastAllocatorPurgeAttemptTime = system_clock::now();
724724
}
725725

726-
void Fuzzer::ReadAndExecuteSeedCorpora(
727-
const Vector<std::string> &CorpusDirs,
728-
const Vector<std::string> &ExtraSeedFiles) {
726+
void Fuzzer::ReadAndExecuteSeedCorpora(Vector<SizedFile> &CorporaFiles) {
729727
const size_t kMaxSaneLen = 1 << 20;
730728
const size_t kMinDefaultLen = 4096;
731-
Vector<SizedFile> SizedFiles;
732729
size_t MaxSize = 0;
733730
size_t MinSize = -1;
734731
size_t TotalSize = 0;
735-
size_t LastNumFiles = 0;
736-
for (auto &Dir : CorpusDirs) {
737-
GetSizedFilesFromDir(Dir, &SizedFiles);
738-
Printf("INFO: % 8zd files found in %s\n", SizedFiles.size() - LastNumFiles,
739-
Dir.c_str());
740-
LastNumFiles = SizedFiles.size();
741-
}
742-
// Add files from -seed_inputs.
743-
for (auto &File : ExtraSeedFiles)
744-
if (auto Size = FileSize(File))
745-
SizedFiles.push_back({File, Size});
746-
747-
for (auto &File : SizedFiles) {
732+
for (auto &File : CorporaFiles) {
748733
MaxSize = Max(File.Size, MaxSize);
749734
MinSize = Min(File.Size, MinSize);
750735
TotalSize += File.Size;
@@ -761,24 +746,24 @@ void Fuzzer::ReadAndExecuteSeedCorpora(
761746
if (Options.LazyCounters)
762747
TPC.ProtectLazyCounters();
763748

764-
if (SizedFiles.empty()) {
749+
if (CorporaFiles.empty()) {
765750
Printf("INFO: A corpus is not provided, starting from an empty corpus\n");
766751
Unit U({'\n'}); // Valid ASCII input.
767752
RunOne(U.data(), U.size());
768753
} else {
769754
Printf("INFO: seed corpus: files: %zd min: %zdb max: %zdb total: %zdb"
770755
" rss: %zdMb\n",
771-
SizedFiles.size(), MinSize, MaxSize, TotalSize, GetPeakRSSMb());
756+
CorporaFiles.size(), MinSize, MaxSize, TotalSize, GetPeakRSSMb());
772757
if (Options.ShuffleAtStartUp)
773-
std::shuffle(SizedFiles.begin(), SizedFiles.end(), MD.GetRand());
758+
std::shuffle(CorporaFiles.begin(), CorporaFiles.end(), MD.GetRand());
774759

775760
if (Options.PreferSmall) {
776-
std::stable_sort(SizedFiles.begin(), SizedFiles.end());
777-
assert(SizedFiles.front().Size <= SizedFiles.back().Size);
761+
std::stable_sort(CorporaFiles.begin(), CorporaFiles.end());
762+
assert(CorporaFiles.front().Size <= CorporaFiles.back().Size);
778763
}
779764

780765
// Load and execute inputs one by one.
781-
for (auto &SF : SizedFiles) {
766+
for (auto &SF : CorporaFiles) {
782767
auto U = FileToVector(SF.File, MaxInputLen, /*ExitOnError=*/false);
783768
assert(U.size() <= MaxInputLen);
784769
RunOne(U.data(), U.size());
@@ -803,9 +788,8 @@ void Fuzzer::ReadAndExecuteSeedCorpora(
803788
}
804789
}
805790

806-
void Fuzzer::Loop(const Vector<std::string> &CorpusDirs,
807-
const Vector<std::string> &ExtraSeedFiles) {
808-
ReadAndExecuteSeedCorpora(CorpusDirs, ExtraSeedFiles);
791+
void Fuzzer::Loop(Vector<SizedFile> &CorporaFiles) {
792+
ReadAndExecuteSeedCorpora(CorporaFiles);
809793
DFT.Clear(); // No need for DFT any more.
810794
TPC.SetPrintNewPCs(Options.PrintNewCovPcs);
811795
TPC.SetPrintNewFuncs(Options.PrintNewCovFuncs);

0 commit comments

Comments
 (0)