| Index: mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl
|
| diff --git a/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl
|
| index 96be82fc0663766436b5e9dd0cc9d98fd1c70f2b..1897a4924a792e6ed53f184843b88fdf0303b4b1 100644
|
| --- a/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl
|
| +++ b/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl
|
| @@ -1,3 +1,37 @@
|
| +{%- macro validate(struct, class_name) %}
|
| + if (!data)
|
| + return true;
|
| +
|
| + if (!ValidateStructHeader(
|
| + data, sizeof({{class_name}}),
|
| + {{struct.packed.packed_fields|length}}, bounds_checker)) {
|
| + return false;
|
| + }
|
| +
|
| + const {{class_name}}* MOJO_ALLOW_UNUSED object =
|
| + static_cast<const {{class_name}}*>(data);
|
| +
|
| +{%- for packed_field in struct.packed.packed_fields
|
| + if packed_field.field.kind|is_object_kind %}
|
| +{%- set wrapper_type = packed_field.field.kind|cpp_wrapper_type %}
|
| +{%- set name = packed_field.field.name %}
|
| + if (!mojo::internal::ValidateEncodedPointer(&object->{{name}}.offset) ||
|
| + !{{wrapper_type}}::Data_::Validate(
|
| + mojo::internal::DecodePointerRaw(&object->{{name}}.offset),
|
| + bounds_checker)) {
|
| + return false;
|
| + }
|
| +{%- endfor %}
|
| +{%- for packed_field in struct.packed.packed_fields
|
| + if packed_field.field.kind|is_handle_kind %}
|
| +{%- set name = packed_field.field.name %}
|
| + if (!bounds_checker->ClaimHandle(object->{{name}}))
|
| + return false;
|
| +{%- endfor %}
|
| +
|
| + return true;
|
| +{%- endmacro %}
|
| +
|
| {%- macro field_line(field) %}
|
| {%- set type = field.kind|cpp_field_type %}
|
| {%- set name = field.name -%}
|
|
|