diff options
Diffstat (limited to 'llvm/lib/Fuzzer/FuzzerInterface.h')
-rw-r--r-- | llvm/lib/Fuzzer/FuzzerInterface.h | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/llvm/lib/Fuzzer/FuzzerInterface.h b/llvm/lib/Fuzzer/FuzzerInterface.h index d3843a47d1c..8798b650383 100644 --- a/llvm/lib/Fuzzer/FuzzerInterface.h +++ b/llvm/lib/Fuzzer/FuzzerInterface.h @@ -64,7 +64,8 @@ class FuzzerRandomLibc : public FuzzerRandomBase { class MutationDispatcher { public: - MutationDispatcher(FuzzerRandomBase &Rand) : Rand(Rand) {} + MutationDispatcher(FuzzerRandomBase &Rand); + ~MutationDispatcher(); /// Mutates data by shuffling bytes. size_t Mutate_ShuffleBytes(uint8_t *Data, size_t Size, size_t MaxSize); /// Mutates data by erasing a byte. @@ -76,6 +77,10 @@ class MutationDispatcher { /// Mutates data by chanding one bit. size_t Mutate_ChangeBit(uint8_t *Data, size_t Size, size_t MaxSize); + /// Mutates data by adding a word from the dictionary. + size_t Mutate_AddWordFromDictionary(uint8_t *Data, size_t Size, + size_t MaxSize); + /// Applies one of the above mutations. /// Returns the new size of data which could be up to MaxSize. size_t Mutate(uint8_t *Data, size_t Size, size_t MaxSize); @@ -84,8 +89,12 @@ class MutationDispatcher { size_t CrossOver(const uint8_t *Data1, size_t Size1, const uint8_t *Data2, size_t Size2, uint8_t *Out, size_t MaxOutSize); + void AddWordToDictionary(const uint8_t *Word, size_t Size); + private: FuzzerRandomBase &Rand; + struct Impl; + Impl *MDImpl; }; // For backward compatibility only, deprecated. @@ -140,6 +149,8 @@ class UserSuppliedFuzzer { FuzzerRandomBase &GetRand() { return *Rand; } + MutationDispatcher &GetMD() { return MD; } + private: bool OwnRand = false; FuzzerRandomBase *Rand; |