diff options
author | Kostya Serebryany <kcc@google.com> | 2016-01-12 02:36:59 +0000 |
---|---|---|
committer | Kostya Serebryany <kcc@google.com> | 2016-01-12 02:36:59 +0000 |
commit | 4174005622e804e0b6f0f3ac7bcc5154b18c29b4 (patch) | |
tree | ced2a8d97e25f7bc753df3b4f184e8ff2358a43c /llvm/lib/Fuzzer/FuzzerMutate.cpp | |
parent | 859e86d9624f1d2fd6c7d45f3c8060cbce5c359b (diff) | |
download | llvm-4174005622e804e0b6f0f3ac7bcc5154b18c29b4.zip llvm-4174005622e804e0b6f0f3ac7bcc5154b18c29b4.tar.gz llvm-4174005622e804e0b6f0f3ac7bcc5154b18c29b4.tar.bz2 |
[libFuzzer] when a new unit is discovered using a dictionary, print all used dictionary entries
llvm-svn: 257435
Diffstat (limited to 'llvm/lib/Fuzzer/FuzzerMutate.cpp')
-rw-r--r-- | llvm/lib/Fuzzer/FuzzerMutate.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/llvm/lib/Fuzzer/FuzzerMutate.cpp b/llvm/lib/Fuzzer/FuzzerMutate.cpp index 219837f..30e5b43 100644 --- a/llvm/lib/Fuzzer/FuzzerMutate.cpp +++ b/llvm/lib/Fuzzer/FuzzerMutate.cpp @@ -32,6 +32,7 @@ struct MutationDispatcher::Impl { std::vector<DictionaryEntry> AutoDictionary; std::vector<Mutator> Mutators; std::vector<Mutator> CurrentMutatorSequence; + std::vector<DictionaryEntry> CurrentDictionaryEntrySequence; const std::vector<Unit> *Corpus = nullptr; FuzzerRandomBase &Rand; @@ -146,13 +147,14 @@ size_t MutationDispatcher::Impl::AddWordFromDictionary( size_t Idx = UsePositionHint ? PositionHint : Rand(Size + 1); memmove(Data + Idx + Word.size(), Data + Idx, Size - Idx); memcpy(Data + Idx, Word.data(), Word.size()); - return Size + Word.size(); + Size += Word.size(); } else { // Overwrite some bytes with Word. if (Word.size() > Size) return 0; size_t Idx = UsePositionHint ? PositionHint : Rand(Size - Word.size()); memcpy(Data + Idx, Word.data(), Word.size()); - return Size; } + CurrentDictionaryEntrySequence.push_back(DE); + return Size; } size_t MutationDispatcher::Mutate_ChangeASCIIInteger(uint8_t *Data, size_t Size, @@ -206,12 +208,20 @@ size_t MutationDispatcher::Mutate_CrossOver(uint8_t *Data, size_t Size, void MutationDispatcher::StartMutationSequence() { MDImpl->CurrentMutatorSequence.clear(); + MDImpl->CurrentDictionaryEntrySequence.clear(); } void MutationDispatcher::PrintMutationSequence() { Printf("MS: %zd ", MDImpl->CurrentMutatorSequence.size()); for (auto M : MDImpl->CurrentMutatorSequence) Printf("%s-", M.Name); + if (!MDImpl->CurrentDictionaryEntrySequence.empty()) { + Printf(" DE: "); + for (auto DE : MDImpl->CurrentDictionaryEntrySequence) { + Printf("\""); + PrintASCII(DE.Word, "\"-"); + } + } } // Mutates Data in place, returns new size. |