diff options
| author | George Karpenkov <ekarpenkov@apple.com> | 2017-08-27 23:20:09 +0000 |
|---|---|---|
| committer | George Karpenkov <ekarpenkov@apple.com> | 2017-08-27 23:20:09 +0000 |
| commit | fe253ee56618ac233dc0516daea8775b58f456d8 (patch) | |
| tree | 404e175dfbce15ced937f1a39cd8c5d1c8f474c1 /lib/fuzzer/FuzzerMerge.cpp | |
| parent | cc44d7c1f1d3e45e338faf2ecc4fb43c58dda330 (diff) | |
| download | compiler-rt-fe253ee56618ac233dc0516daea8775b58f456d8.tar.gz | |
[libFuzzer] Use custom allocators for STL containers in libFuzzer.
Avoids ODR violations causing spurious ASAN warnings.
Differential Revision: https://reviews.llvm.org/D37086
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@311866 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/fuzzer/FuzzerMerge.cpp')
| -rw-r--r-- | lib/fuzzer/FuzzerMerge.cpp | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/lib/fuzzer/FuzzerMerge.cpp b/lib/fuzzer/FuzzerMerge.cpp index 616c0999a..6f111a5e4 100644 --- a/lib/fuzzer/FuzzerMerge.cpp +++ b/lib/fuzzer/FuzzerMerge.cpp @@ -74,7 +74,7 @@ bool Merger::Parse(std::istream &IS, bool ParseCoverage) { size_t ExpectedStartMarker = 0; const size_t kInvalidStartMarker = -1; size_t LastSeenStartMarker = kInvalidStartMarker; - std::vector<uint32_t> TmpFeatures; + Vector<uint32_t> TmpFeatures; while (std::getline(IS, Line, '\n')) { std::istringstream ISS1(Line); std::string Marker; @@ -122,11 +122,11 @@ size_t Merger::ApproximateMemoryConsumption() const { // Decides which files need to be merged (add thost to NewFiles). // Returns the number of new features added. -size_t Merger::Merge(const std::set<uint32_t> &InitialFeatures, - std::vector<std::string> *NewFiles) { +size_t Merger::Merge(const Set<uint32_t> &InitialFeatures, + Vector<std::string> *NewFiles) { NewFiles->clear(); assert(NumFilesInFirstCorpus <= Files.size()); - std::set<uint32_t> AllFeatures(InitialFeatures); + Set<uint32_t> AllFeatures(InitialFeatures); // What features are in the initial corpus? for (size_t i = 0; i < NumFilesInFirstCorpus; i++) { @@ -138,7 +138,7 @@ size_t Merger::Merge(const std::set<uint32_t> &InitialFeatures, // Remove all features that we already know from all other inputs. for (size_t i = NumFilesInFirstCorpus; i < Files.size(); i++) { auto &Cur = Files[i].Features; - std::vector<uint32_t> Tmp; + Vector<uint32_t> Tmp; std::set_difference(Cur.begin(), Cur.end(), AllFeatures.begin(), AllFeatures.end(), std::inserter(Tmp, Tmp.begin())); Cur.swap(Tmp); @@ -178,16 +178,16 @@ void Merger::PrintSummary(std::ostream &OS) { } } -std::set<uint32_t> Merger::AllFeatures() const { - std::set<uint32_t> S; +Set<uint32_t> Merger::AllFeatures() const { + Set<uint32_t> S; for (auto &File : Files) S.insert(File.Features.begin(), File.Features.end()); return S; } -std::set<uint32_t> Merger::ParseSummary(std::istream &IS) { +Set<uint32_t> Merger::ParseSummary(std::istream &IS) { std::string Line, Tmp; - std::set<uint32_t> Res; + Set<uint32_t> Res; while (std::getline(IS, Line, '\n')) { size_t N; std::istringstream ISS1(Line); @@ -235,7 +235,7 @@ void Fuzzer::CrashResistantMergeInternalStep(const std::string &CFPath) { TPC.ResetMaps(); ExecuteCallback(U.data(), U.size()); // Collect coverage. - std::set<size_t> Features; + Set<size_t> Features; TPC.CollectFeatures([&](size_t Feature) -> bool { Features.insert(Feature); return true; @@ -252,15 +252,15 @@ void Fuzzer::CrashResistantMergeInternalStep(const std::string &CFPath) { } // Outer process. Does not call the target code and thus sohuld not fail. -void Fuzzer::CrashResistantMerge(const std::vector<std::string> &Args, - const std::vector<std::string> &Corpora, +void Fuzzer::CrashResistantMerge(const Vector<std::string> &Args, + const Vector<std::string> &Corpora, const char *CoverageSummaryInputPathOrNull, const char *CoverageSummaryOutputPathOrNull) { if (Corpora.size() <= 1) { Printf("Merge requires two or more corpus dirs\n"); return; } - std::vector<std::string> AllFiles; + Vector<std::string> AllFiles; ListFilesInDirRecursive(Corpora[0], nullptr, &AllFiles, /*TopDir*/true); size_t NumFilesInFirstCorpus = AllFiles.size(); for (size_t i = 1; i < Corpora.size(); i++) @@ -318,8 +318,8 @@ void Fuzzer::CrashResistantMerge(const std::vector<std::string> &Args, std::ofstream SummaryOut(CoverageSummaryOutputPathOrNull); M.PrintSummary(SummaryOut); } - std::vector<std::string> NewFiles; - std::set<uint32_t> InitialFeatures; + Vector<std::string> NewFiles; + Set<uint32_t> InitialFeatures; if (CoverageSummaryInputPathOrNull) { std::ifstream SummaryIn(CoverageSummaryInputPathOrNull); InitialFeatures = M.ParseSummary(SummaryIn); |
