diff options
author | Mike Aizatsky <aizatsky@chromium.org> | 2016-06-23 20:44:48 +0000 |
---|---|---|
committer | Mike Aizatsky <aizatsky@chromium.org> | 2016-06-23 20:44:48 +0000 |
commit | f0b3e85f4e96f68c22307d10f37c12dec97a2e2a (patch) | |
tree | 6a25fdb42388eb23829901543d93a917ee6d5cbe /llvm/lib/Fuzzer/FuzzerMutate.cpp | |
parent | f2898d73a5600e52e5d51903ae612d4804bd174e (diff) | |
download | llvm-f0b3e85f4e96f68c22307d10f37c12dec97a2e2a.zip llvm-f0b3e85f4e96f68c22307d10f37c12dec97a2e2a.tar.gz llvm-f0b3e85f4e96f68c22307d10f37c12dec97a2e2a.tar.bz2 |
[libfuzzer] moving is_ascii handler inside mutation dispatcher.
Summary: It also fixes a bug, when first random might not be ascii.
Differential Revision: http://reviews.llvm.org/D21573
llvm-svn: 273611
Diffstat (limited to 'llvm/lib/Fuzzer/FuzzerMutate.cpp')
-rw-r--r-- | llvm/lib/Fuzzer/FuzzerMutate.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/llvm/lib/Fuzzer/FuzzerMutate.cpp b/llvm/lib/Fuzzer/FuzzerMutate.cpp index bd82c0d..72b095d 100644 --- a/llvm/lib/Fuzzer/FuzzerMutate.cpp +++ b/llvm/lib/Fuzzer/FuzzerMutate.cpp @@ -18,7 +18,9 @@ namespace fuzzer { const size_t Dictionary::kMaxDictSize; -MutationDispatcher::MutationDispatcher(Random &Rand) : Rand(Rand) { +MutationDispatcher::MutationDispatcher(Random &Rand, + const FuzzingOptions &Options) + : Rand(Rand), Options(Options) { DefaultMutators.insert( DefaultMutators.begin(), { @@ -285,6 +287,8 @@ size_t MutationDispatcher::MutateImpl(uint8_t *Data, size_t Size, if (Size == 0) { for (size_t i = 0; i < MaxSize; i++) Data[i] = RandCh(Rand); + if (Options.OnlyASCII) + ToASCII(Data, MaxSize); return MaxSize; } assert(Size > 0); @@ -295,6 +299,8 @@ size_t MutationDispatcher::MutateImpl(uint8_t *Data, size_t Size, auto M = Mutators[Rand(Mutators.size())]; size_t NewSize = (this->*(M.Fn))(Data, Size, MaxSize); if (NewSize) { + if (Options.OnlyASCII) + ToASCII(Data, NewSize); CurrentMutatorSequence.push_back(M); return NewSize; } |