diff options
author | Kostya Serebryany <kcc@google.com> | 2015-08-01 01:42:51 +0000 |
---|---|---|
committer | Kostya Serebryany <kcc@google.com> | 2015-08-01 01:42:51 +0000 |
commit | 8ce7424e9c3150385de060334e5f3c61518ce64e (patch) | |
tree | 934e190d50cd2166d4dabd416da3825ff84cb5c8 /llvm/lib/Fuzzer/FuzzerMutate.cpp | |
parent | 6e48a81309306c871a744c602bee74c9274f4b30 (diff) | |
download | llvm-8ce7424e9c3150385de060334e5f3c61518ce64e.zip llvm-8ce7424e9c3150385de060334e5f3c61518ce64e.tar.gz llvm-8ce7424e9c3150385de060334e5f3c61518ce64e.tar.bz2 |
[libFuzzer] start refactoring the Mutator and adding tests to it
llvm-svn: 243817
Diffstat (limited to 'llvm/lib/Fuzzer/FuzzerMutate.cpp')
-rw-r--r-- | llvm/lib/Fuzzer/FuzzerMutate.cpp | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/llvm/lib/Fuzzer/FuzzerMutate.cpp b/llvm/lib/Fuzzer/FuzzerMutate.cpp index 66df98a..eec6475 100644 --- a/llvm/lib/Fuzzer/FuzzerMutate.cpp +++ b/llvm/lib/Fuzzer/FuzzerMutate.cpp @@ -33,6 +33,16 @@ static char RandCh(FuzzerRandomBase &Rand) { return Special[Rand(sizeof(Special) - 1)]; } +size_t Mutate_EraseByte(uint8_t *Data, size_t Size, size_t MaxSize, + FuzzerRandomBase &Rand) { + assert(Size); + if (Size == 1) return Size; + size_t Idx = Rand(Size); + // Erase Data[Idx]. + memmove(Data + Idx, Data + Idx + 1, Size - Idx - 1); + return Size - 1; +} + // Mutates Data in place, returns new size. size_t Mutate(uint8_t *Data, size_t Size, size_t MaxSize, FuzzerRandomBase &Rand) { @@ -46,13 +56,7 @@ size_t Mutate(uint8_t *Data, size_t Size, size_t MaxSize, assert(Size > 0); size_t Idx = Rand(Size); switch (Rand(3)) { - case 0: - if (Size > 1) { - // Erase Data[Idx]. - memmove(Data + Idx, Data + Idx + 1, Size - Idx - 1); - Size = Size - 1; - } - [[clang::fallthrough]]; + case 0: Size = Mutate_EraseByte(Data, Size, MaxSize, Rand); break; case 1: if (Size < MaxSize) { // Insert new value at Data[Idx]. |