Lines Matching +full:de +full:- +full:assert

1 //===- FuzzerMutate.cpp - Mutate a test input -----------------------------===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 //===----------------------------------------------------------------------===//
53 if (EF->LLVMFuzzerCustomMutator) in MutationDispatcher()
58 if (EF->LLVMFuzzerCustomCrossOver) in MutationDispatcher()
66 const char Special[] = "!*'();:@&=+$,/?%#[]012Az-`~.\xff\x00"; in RandCh()
67 return Special[Rand(sizeof(Special) - 1)]; in RandCh()
72 if (EF->__msan_unpoison) in Mutate_Custom()
73 EF->__msan_unpoison(Data, Size); in Mutate_Custom()
74 if (EF->__msan_unpoison_param) in Mutate_Custom()
75 EF->__msan_unpoison_param(4); in Mutate_Custom()
76 return EF->LLVMFuzzerCustomMutator(Data, Size, MaxSize, in Mutate_Custom()
91 if (EF->__msan_unpoison) { in Mutate_CustomCrossOver()
92 EF->__msan_unpoison(Data, Size); in Mutate_CustomCrossOver()
93 EF->__msan_unpoison(Other.data(), Other.size()); in Mutate_CustomCrossOver()
94 EF->__msan_unpoison(U.data(), U.size()); in Mutate_CustomCrossOver()
96 if (EF->__msan_unpoison_param) in Mutate_CustomCrossOver()
97 EF->__msan_unpoison_param(7); in Mutate_CustomCrossOver()
98 size_t NewSize = EF->LLVMFuzzerCustomCrossOver( in Mutate_CustomCrossOver()
104 assert(NewSize <= MaxSize && "CustomCrossOver returned overisized unit"); in Mutate_CustomCrossOver()
114 size_t ShuffleStart = Rand(Size - ShuffleAmount); in Mutate_ShuffleBytes()
115 assert(ShuffleStart + ShuffleAmount <= Size); in Mutate_ShuffleBytes()
124 assert(N < Size); in Mutate_EraseBytes()
125 size_t Idx = Rand(Size - N + 1); in Mutate_EraseBytes()
127 memmove(Data + Idx, Data + Idx + N, Size - Idx - N); in Mutate_EraseBytes()
128 // Printf("Erase: %zd %zd => %zd; Idx %zd\n", N, Size, Size - N, Idx); in Mutate_EraseBytes()
129 return Size - N; in Mutate_EraseBytes()
137 memmove(Data + Idx + 1, Data + Idx, Size - Idx); in Mutate_InsertByte()
147 size_t MaxBytesToInsert = std::min(MaxSize - Size, (size_t)128); in Mutate_InsertRepeatedBytes()
148 size_t N = Rand(MaxBytesToInsert - kMinBytesToInsert + 1) + kMinBytesToInsert; in Mutate_InsertRepeatedBytes()
149 assert(Size + N <= MaxSize && N); in Mutate_InsertRepeatedBytes()
152 memmove(Data + Idx + N, Data + Idx, Size - Idx); in Mutate_InsertRepeatedBytes()
185 DictionaryEntry &DE) { in ApplyDictionaryEntry() argument
186 const Word &W = DE.GetW(); in ApplyDictionaryEntry()
187 bool UsePositionHint = DE.HasPositionHint() && in ApplyDictionaryEntry()
188 DE.GetPositionHint() + W.size() < Size && in ApplyDictionaryEntry()
192 size_t Idx = UsePositionHint ? DE.GetPositionHint() : Rand(Size + 1); in ApplyDictionaryEntry()
193 memmove(Data + Idx + W.size(), Data + Idx, Size - Idx); in ApplyDictionaryEntry()
199 UsePositionHint ? DE.GetPositionHint() : Rand(Size + 1 - W.size()); in ApplyDictionaryEntry()
209 // input and if it succeeds it creates a DE with a position hint.
210 // Otherwise it creates a DE with one of the arguments w/o a position hint.
231 (const uint8_t *)SearchMemory(Cur, End - Cur, ExistingBytes, ArgSize); in MakeDictionaryEntryFromCMP()
233 Positions[NumPositions++] = Cur - Data; in MakeDictionaryEntryFromCMP()
238 DictionaryEntry DE(W); in MakeDictionaryEntryFromCMP() local
239 return DE; in MakeDictionaryEntryFromCMP()
248 T Arg1Mutation = static_cast<T>(Arg1 + Rand(-1, 1)); in MakeDictionaryEntryFromCMP()
249 T Arg2Mutation = static_cast<T>(Arg2 + Rand(-1, 1)); in MakeDictionaryEntryFromCMP()
263 DictionaryEntry DE; in Mutate_AddWordFromTORC() local
267 DE = MakeDictionaryEntryFromCMP(X.A, X.B, Data, Size); in Mutate_AddWordFromTORC()
272 DE = MakeDictionaryEntryFromCMP((uint16_t)X.A, (uint16_t)X.B, Data, Size); in Mutate_AddWordFromTORC()
274 DE = MakeDictionaryEntryFromCMP(X.A, X.B, Data, Size); in Mutate_AddWordFromTORC()
278 DE = MakeDictionaryEntryFromCMP(X.A, X.B, Data, Size); in Mutate_AddWordFromTORC()
282 DE = DictionaryEntry(X); in Mutate_AddWordFromTORC()
285 assert(0); in Mutate_AddWordFromTORC()
287 if (!DE.GetW().size()) return 0; in Mutate_AddWordFromTORC()
288 Size = ApplyDictionaryEntry(Data, Size, MaxSize, DE); in Mutate_AddWordFromTORC()
293 DERef = DE; in Mutate_AddWordFromTORC()
307 DictionaryEntry &DE = D[Rand(D.size())]; in AddWordFromDictionary() local
308 Size = ApplyDictionaryEntry(Data, Size, MaxSize, DE); in AddWordFromDictionary()
310 DE.IncUseCount(); in AddWordFromDictionary()
311 CurrentDictionaryEntrySequence.push_back(&DE); in AddWordFromDictionary()
321 size_t CopySize = Rand(ToSize - ToBeg) + 1; in CopyPartOf()
322 assert(ToBeg + CopySize <= ToSize); in CopyPartOf()
324 size_t FromBeg = Rand(FromSize - CopySize + 1); in CopyPartOf()
325 assert(FromBeg + CopySize <= FromSize); in CopyPartOf()
336 size_t AvailableSpace = MaxToSize - ToSize; in InsertPartOf()
339 size_t FromBeg = Rand(FromSize - CopySize + 1); in InsertPartOf()
340 assert(FromBeg + CopySize <= FromSize); in InsertPartOf()
342 assert(ToInsertPos + CopySize <= MaxToSize); in InsertPartOf()
343 size_t TailSize = ToSize - ToInsertPos; in InsertPartOf()
375 assert(B < E); in Mutate_ChangeASCIIInteger()
377 // strtol and friends don't accept non-zero-teminated data, parse it manually. in Mutate_ChangeASCIIInteger()
378 uint64_t Val = Data[B] - '0'; in Mutate_ChangeASCIIInteger()
380 Val = Val * 10 + Data[i] - '0'; in Mutate_ChangeASCIIInteger()
385 case 1: Val--; break; in Mutate_ChangeASCIIInteger()
389 default: assert(0); in Mutate_ChangeASCIIInteger()
393 size_t Idx = E + B - i - 1; in Mutate_ChangeASCIIInteger()
394 assert(Idx >= B && Idx < E); in Mutate_ChangeASCIIInteger()
404 size_t Off = Rand(Size - sizeof(T) + 1); in ChangeBinaryInteger()
405 assert(Off + sizeof(T) <= Size); in ChangeBinaryInteger()
414 Add -= 10; in ChangeBinaryInteger()
420 Val = -Val; in ChangeBinaryInteger()
435 default: assert(0); in Mutate_ChangeBinaryInteger()
463 default: assert(0); in Mutate_CrossOver()
465 assert(NewSize > 0 && "CrossOver returned empty unit"); in Mutate_CrossOver()
466 assert(NewSize <= MaxSize && "CrossOver returned overisized unit"); in Mutate_CrossOver()
477 for (auto DE : CurrentDictionaryEntrySequence) { in RecordSuccessfulMutationSequence() local
478 // PersistentAutoDictionary.AddWithSuccessCountOne(DE); in RecordSuccessfulMutationSequence()
479 DE->IncSuccessCount(); in RecordSuccessfulMutationSequence()
480 assert(DE->GetW().size()); in RecordSuccessfulMutationSequence()
482 if (!PersistentAutoDictionary.ContainsWord(DE->GetW())) in RecordSuccessfulMutationSequence()
483 PersistentAutoDictionary.push_back(*DE); in RecordSuccessfulMutationSequence()
489 for (auto &DE : PersistentAutoDictionary) in PrintRecommendedDictionary() local
490 if (!ManualDictionary.ContainsWord(DE.GetW())) in PrintRecommendedDictionary()
491 V.push_back(DE); in PrintRecommendedDictionary()
494 for (auto &DE: V) { in PrintRecommendedDictionary() local
495 assert(DE.GetW().size()); in PrintRecommendedDictionary()
497 PrintASCII(DE.GetW(), "\""); in PrintRecommendedDictionary()
498 Printf(" # Uses: %zd\n", DE.GetUseCount()); in PrintRecommendedDictionary()
509 Printf("%s-", CurrentMutatorSequence[i].Name); in PrintMutationSequence()
511 Printf(" DE: "); in PrintMutationSequence()
517 PrintASCII(CurrentDictionaryEntrySequence[i]->GetW(), "\"-"); in PrintMutationSequence()
526 MS += "-"; in MutationSequence()
544 assert(MaxSize > 0); in MutateImpl()
547 // Try several times before returning un-mutated data. in MutateImpl()
550 size_t NewSize = (this->*(M.Fn))(Data, Size, MaxSize); in MutateImpl()
580 assert(!T.empty()); in MutateWithMask()
582 assert(NewSize <= OneBits); in MutateWithMask()