[fuzzers] Fix WGPUStringView in LPM fuzzer gen code.
- Update how we handle LPM fuzzer code generation with the new
WGPUStringView
Bug: 42241188
Change-Id: I9e7552bbd38e3701ea38a2cb047f748a4a29b51e
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/200076
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Loko Kung <lokokung@google.com>
diff --git a/generator/templates/dawn/fuzzers/lpmfuzz/DawnLPMSerializer.cpp b/generator/templates/dawn/fuzzers/lpmfuzz/DawnLPMSerializer.cpp
index 3645c8b..f544e19 100644
--- a/generator/templates/dawn/fuzzers/lpmfuzz/DawnLPMSerializer.cpp
+++ b/generator/templates/dawn/fuzzers/lpmfuzz/DawnLPMSerializer.cpp
@@ -56,9 +56,33 @@
{{as_cType(member.type.name)}}
{%- endmacro %}
+//* Converts an existing proto string to StringView.
+{% macro convert_string(member) %}
+ {{ assert(member.type.name.get() == "string view" or member.type.name.get() == "nullable string view" ) }}
+ {% set memberName = as_varName(member.name) %}
+ {% set protoMember = as_protobufMemberName(member.name) %}
+ {% if member.type.name.get() == "nullable string view" %}
+ if (!proto_record.has_{{protoMember}}()) {
+ mutable_record->{{ memberName }}.data = nullptr;
+ mutable_record->{{ memberName }}.length = SIZE_MAX;
+ } else
+ {% endif %}
+ {
+ auto memberLength = static_cast<unsigned int>({{member_length(member, "proto_record." + protoMember)}});
+ char* memberBuffer;
+ WIRE_TRY(serializeBuffer->NextN(memberLength, &memberBuffer));
+ memcpy(memberBuffer, proto_record.{{protoMember}}().c_str(), memberLength);
+ mutable_record->{{ memberName }}.data = memberBuffer;
+ mutable_record->{{ memberName }}.length = memberLength;
+ }
+{% endmacro %}
+
//* Outputs the conversion code to put `in` in `out`
{% macro convert_member(member, in, out, in_access="") %}
- {% if member.type.category == "structure" or member.type.category == "callback info" %}
+ {% if member.type.name.get() == "string view" or member.type.name.get() == "nullable string view" %}
+ //* Custom conversion for string view types.
+ {{ convert_string(member) }}
+ {% elif member.type.category == "structure" or member.type.category == "callback info" %}
{{ convert_structure(member, in, out, in_access) }}
{% elif member.type in by_category["bitmask"] %}
{{ convert_bitmask(member, in, out, in_access) }}
@@ -250,9 +274,11 @@
//* Output structure conversion first because it is used by commands.
{% for type in by_category["callback info"] + by_category["structure"] %}
- {% set name = as_cType(type.name) %}
- {% if type.name.CamelCase() not in client_side_structures %}
- {{ write_record_conversion_helpers(type, name, type.members, False) }}
+ {% if type.name.get() != "string view" and type.name.get() != "nullable string view" %}
+ {% set name = as_cType(type.name) %}
+ {% if type.name.CamelCase() not in client_side_structures %}
+ {{ write_record_conversion_helpers(type, name, type.members, False) }}
+ {% endif %}
{% endif %}
{% endfor %}
diff --git a/generator/templates/dawn/fuzzers/lpmfuzz/dawn_lpm.proto b/generator/templates/dawn/fuzzers/lpmfuzz/dawn_lpm.proto
index ed62d84..cc21bba 100644
--- a/generator/templates/dawn/fuzzers/lpmfuzz/dawn_lpm.proto
+++ b/generator/templates/dawn/fuzzers/lpmfuzz/dawn_lpm.proto
@@ -127,6 +127,10 @@
{% elif member.type.name.get() == "ObjectId" %}
{{ optionality(member) }} {{ lift_objectid_member(member, count) }} = {{ count.value }};
{% set count.value = count.value + 1 %}
+ {% elif member.type.name.get() == "string view" %}
+ required string {{ as_protobufNameLPM(member.name) }} = {{ count.value }};
+ {% elif member.type.name.get() == "nullable string view" %}
+ optional string {{ as_protobufNameLPM(member.name) }} = {{ count.value }};
{% elif member.type in by_category["structure"] or
member.type in by_category["enum"] %}
{{ optionality(member) }} {{ as_protobufTypeLPM(member) }} {{ as_protobufNameLPM(member.name) }} = {{ count.value }};
@@ -174,9 +178,11 @@
{% endmacro %}
{% for structure in by_category["callback info"] + by_category["structure"] %}
- message {{structure.name.CamelCase()}} {
- {{ lift_proto_members_helper(structure, structure.name, structure.members) }}
- }
+ {% if structure.name.get() != "string view" and structure.name.get() != "nullable string view" %}
+ message {{structure.name.CamelCase()}} {
+ {{ lift_proto_members_helper(structure, structure.name, structure.members) }}
+ }
+ {% endif %}
{% endfor %}