forked from OSchip/llvm-project
[libFuzzer] extend the dictionary mutator to optionally overwrite data with the dict entry
llvm-svn: 256900
This commit is contained in:
parent
52d3b67c1d
commit
80eb76abf4
|
@ -117,11 +117,18 @@ size_t MutationDispatcher::Mutate_AddWordFromDictionary(uint8_t *Data,
|
|||
assert(!D.empty());
|
||||
if (D.empty()) return 0;
|
||||
const Unit &Word = D[Rand(D.size())];
|
||||
if (Size + Word.size() > MaxSize) return 0;
|
||||
size_t Idx = Rand(Size + 1);
|
||||
memmove(Data + Idx + Word.size(), Data + Idx, Size - Idx);
|
||||
memcpy(Data + Idx, Word.data(), Word.size());
|
||||
return Size + Word.size();
|
||||
if (Rand.RandBool()) { // Insert Word.
|
||||
if (Size + Word.size() > MaxSize) return 0;
|
||||
size_t Idx = Rand(Size + 1);
|
||||
memmove(Data + Idx + Word.size(), Data + Idx, Size - Idx);
|
||||
memcpy(Data + Idx, Word.data(), Word.size());
|
||||
return Size + Word.size();
|
||||
} else { // Overwrite some bytes with Word.
|
||||
if (Word.size() > Size) return 0;
|
||||
size_t Idx = Rand(Size - Word.size());
|
||||
memcpy(Data + Idx, Word.data(), Word.size());
|
||||
return Size;
|
||||
}
|
||||
}
|
||||
|
||||
size_t MutationDispatcher::Mutate_ChangeASCIIInteger(uint8_t *Data, size_t Size,
|
||||
|
|
Loading…
Reference in New Issue