From a44ebf4d065478d3042da45b9d0f7c3060da3b65 Mon Sep 17 00:00:00 2001 From: Kostya Serebryany Date: Thu, 19 Jan 2017 21:14:47 +0000 Subject: [PATCH] [libFuzzer] ensure that entries in PersistentAutoDictionary are not empty llvm-svn: 292520 --- llvm/lib/Fuzzer/FuzzerMutate.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/llvm/lib/Fuzzer/FuzzerMutate.cpp b/llvm/lib/Fuzzer/FuzzerMutate.cpp index f059264db8aa..9b019e9812fe 100644 --- a/llvm/lib/Fuzzer/FuzzerMutate.cpp +++ b/llvm/lib/Fuzzer/FuzzerMutate.cpp @@ -272,6 +272,7 @@ size_t MutationDispatcher::Mutate_AddWordFromTORC( default: assert(0); } + if (!DE.GetW().size()) return 0; Size = ApplyDictionaryEntry(Data, Size, MaxSize, DE); if (!Size) return 0; DictionaryEntry &DERef = @@ -462,6 +463,7 @@ void MutationDispatcher::RecordSuccessfulMutationSequence() { for (auto DE : CurrentDictionaryEntrySequence) { // PersistentAutoDictionary.AddWithSuccessCountOne(DE); DE->IncSuccessCount(); + assert(DE->GetW().size()); // Linear search is fine here as this happens seldom. if (!PersistentAutoDictionary.ContainsWord(DE->GetW())) PersistentAutoDictionary.push_back({DE->GetW(), 1}); @@ -476,6 +478,7 @@ void MutationDispatcher::PrintRecommendedDictionary() { if (V.empty()) return; Printf("###### Recommended dictionary. ######\n"); for (auto &DE: V) { + assert(DE.GetW().size()); Printf("\""); PrintASCII(DE.GetW(), "\""); Printf(" # Uses: %zd\n", DE.GetUseCount());