diff options
Diffstat (limited to 'lib/Fuzzer/FuzzerCorpus.h')
-rw-r--r-- | lib/Fuzzer/FuzzerCorpus.h | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/lib/Fuzzer/FuzzerCorpus.h b/lib/Fuzzer/FuzzerCorpus.h index 468d5e5ddc70..0f0573994a03 100644 --- a/lib/Fuzzer/FuzzerCorpus.h +++ b/lib/Fuzzer/FuzzerCorpus.h @@ -37,8 +37,8 @@ struct InputInfo { }; class InputCorpus { + static const size_t kFeatureSetSize = 1 << 21; public: - static const size_t kFeatureSetSize = 1 << 16; InputCorpus(const std::string &OutputCorpus) : OutputCorpus(OutputCorpus) { memset(InputSizesPerFeature, 0, sizeof(InputSizesPerFeature)); memset(SmallestElementPerFeature, 0, sizeof(SmallestElementPerFeature)); @@ -68,7 +68,8 @@ class InputCorpus { } bool empty() const { return Inputs.empty(); } const Unit &operator[] (size_t Idx) const { return Inputs[Idx]->U; } - void AddToCorpus(const Unit &U, size_t NumFeatures, bool MayDeleteFile = false) { + void AddToCorpus(const Unit &U, size_t NumFeatures, + bool MayDeleteFile = false) { assert(!U.empty()); uint8_t Hash[kSHA1NumBytes]; if (FeatureDebug) @@ -82,7 +83,7 @@ class InputCorpus { II.MayDeleteFile = MayDeleteFile; memcpy(II.Sha1, Hash, kSHA1NumBytes); UpdateCorpusDistribution(); - ValidateFeatureSet(); + // ValidateFeatureSet(); } bool HasUnit(const Unit &U) { return Hashes.count(Hash(U)); } @@ -97,7 +98,7 @@ class InputCorpus { // Hypothesis: units added to the corpus last are more likely to be // interesting. This function gives more weight to the more recent units. size_t ChooseUnitIdxToMutate(Random &Rand) { - size_t Idx = static_cast<size_t>(CorpusDistribution(Rand.Get_mt19937())); + size_t Idx = static_cast<size_t>(CorpusDistribution(Rand)); assert(Idx < Inputs.size()); return Idx; } @@ -132,7 +133,7 @@ class InputCorpus { Printf("EVICTED %zd\n", Idx); } - bool AddFeature(size_t Idx, uint32_t NewSize, bool Shrink) { + void AddFeature(size_t Idx, uint32_t NewSize, bool Shrink) { assert(NewSize); Idx = Idx % kFeatureSetSize; uint32_t OldSize = GetFeature(Idx); @@ -144,23 +145,20 @@ class InputCorpus { II.NumFeatures--; if (II.NumFeatures == 0) DeleteInput(OldIdx); + } else { + NumAddedFeatures++; } + NumUpdatedFeatures++; if (FeatureDebug) Printf("ADD FEATURE %zd sz %d\n", Idx, NewSize); SmallestElementPerFeature[Idx] = Inputs.size(); InputSizesPerFeature[Idx] = NewSize; CountingFeatures = true; - return true; } - return false; } - size_t NumFeatures() const { - size_t Res = 0; - for (size_t i = 0; i < kFeatureSetSize; i++) - Res += GetFeature(i) != 0; - return Res; - } + size_t NumFeatures() const { return NumAddedFeatures; } + size_t NumFeatureUpdates() const { return NumUpdatedFeatures; } void ResetFeatureSet() { assert(Inputs.empty()); @@ -213,6 +211,8 @@ private: std::vector<InputInfo*> Inputs; bool CountingFeatures = false; + size_t NumAddedFeatures = 0; + size_t NumUpdatedFeatures = 0; uint32_t InputSizesPerFeature[kFeatureSetSize]; uint32_t SmallestElementPerFeature[kFeatureSetSize]; |