Increase the #mutations for large protobufs.
PiperOrigin-RevId: 722803320
diff --git a/fuzztest/internal/domains/protobuf_domain_impl.h b/fuzztest/internal/domains/protobuf_domain_impl.h
index 1485f62..2d95653 100644
--- a/fuzztest/internal/domains/protobuf_domain_impl.h
+++ b/fuzztest/internal/domains/protobuf_domain_impl.h
@@ -493,10 +493,17 @@
bool only_shrink) {
if (GetFieldCount(prototype_.Get()->GetDescriptor()) == 0) return;
// TODO(JunyangShao): Maybe make CountNumberOfFields static.
- uint64_t total_weight = CountNumberOfFields(val);
- uint64_t selected_weight = absl::Uniform(absl::IntervalClosedClosed, prng,
- uint64_t{1}, total_weight);
- MutateSelectedField(val, prng, metadata, only_shrink, selected_weight);
+ // The "Mutate" function is called at most 1000 times, independent of the
+ // number of fields in the proto.
+ uint64_t iterations =
+ absl::Uniform(absl::IntervalClosedClosed, prng, uint64_t{1},
+ CountNumberOfFields(val) / 1000 + 1);
+ for (int j = 0; j <= iterations; ++j) {
+ uint64_t total_fields = CountNumberOfFields(val);
+ uint64_t selected_field = absl::Uniform(absl::IntervalClosedClosed, prng,
+ uint64_t{1}, total_fields);
+ MutateSelectedField(val, prng, metadata, only_shrink, selected_field);
+ }
}
auto GetPrinter() const { return ProtobufPrinter{}; }