Update String enforcement for Protobuf domains.
The ASCII String domain is not currently memory dictionary compatible. This means that when using AsciiString, we are not using the string comparison features.
Switch to String/Utf8String. If the field requires utf8 validation, we enforce the domain accordingly. If not, we use the regular String domain.
PiperOrigin-RevId: 755757188
diff --git a/fuzztest/internal/domains/protobuf_domain_impl.h b/fuzztest/internal/domains/protobuf_domain_impl.h
index 3b164d3..3a5faf4 100644
--- a/fuzztest/internal/domains/protobuf_domain_impl.h
+++ b/fuzztest/internal/domains/protobuf_domain_impl.h
@@ -1629,8 +1629,12 @@
auto GetBaseDefaultDomainForFieldType(const FieldDescriptor* field) const {
if constexpr (std::is_same_v<T, std::string>) {
if (field->type() == FieldDescriptor::TYPE_STRING) {
- // Can only use UTF-8. For now, simplify as just ASCII.
- return Domain<T>(AsciiString());
+ // UTF8 enforcement should follow `features.utf8_validation` proto
+ // option
+ if (field->requires_utf8_validation()) {
+ return Domain<T>(Utf8String());
+ }
+ return Domain<T>(String());
}
}