- size_t MutatorIdx = Rand(MDImpl->Mutators.size());
- Size = (this->*(MDImpl->Mutators[MutatorIdx]))(Data, Size, MaxSize);
- assert(Size > 0);
+ // Some mutations may fail (e.g. can't insert more bytes if Size == MaxSize),
+ // in which case they will return 0.
+ // Try several times before returning un-mutated data.
+ for (int Iter = 0; Iter < 10; Iter++) {
+ size_t MutatorIdx = Rand(MDImpl->Mutators.size());
+ size_t NewSize =
+ (this->*(MDImpl->Mutators[MutatorIdx]))(Data, Size, MaxSize);
+ if (NewSize) return NewSize;
+ }