OLD | NEW |
| 1 {%- macro validate(struct, class_name) %} |
| 2 if (!data) |
| 3 return true; |
| 4 |
| 5 if (!ValidateStructHeader( |
| 6 data, sizeof({{class_name}}), |
| 7 {{struct.packed.packed_fields|length}}, bounds_checker)) { |
| 8 return false; |
| 9 } |
| 10 |
| 11 const {{class_name}}* MOJO_ALLOW_UNUSED object = |
| 12 static_cast<const {{class_name}}*>(data); |
| 13 |
| 14 {%- for packed_field in struct.packed.packed_fields |
| 15 if packed_field.field.kind|is_object_kind %} |
| 16 {%- set wrapper_type = packed_field.field.kind|cpp_wrapper_type %} |
| 17 {%- set name = packed_field.field.name %} |
| 18 if (!mojo::internal::ValidateEncodedPointer(&object->{{name}}.offset) || |
| 19 !{{wrapper_type}}::Data_::Validate( |
| 20 mojo::internal::DecodePointerRaw(&object->{{name}}.offset), |
| 21 bounds_checker)) { |
| 22 return false; |
| 23 } |
| 24 {%- endfor %} |
| 25 {%- for packed_field in struct.packed.packed_fields |
| 26 if packed_field.field.kind|is_handle_kind %} |
| 27 {%- set name = packed_field.field.name %} |
| 28 if (!bounds_checker->ClaimHandle(object->{{name}})) |
| 29 return false; |
| 30 {%- endfor %} |
| 31 |
| 32 return true; |
| 33 {%- endmacro %} |
| 34 |
1 {%- macro field_line(field) %} | 35 {%- macro field_line(field) %} |
2 {%- set type = field.kind|cpp_field_type %} | 36 {%- set type = field.kind|cpp_field_type %} |
3 {%- set name = field.name -%} | 37 {%- set name = field.name -%} |
4 {%- if field.kind.spec == 'b' -%} | 38 {%- if field.kind.spec == 'b' -%} |
5 uint8_t {{name}} : 1; | 39 uint8_t {{name}} : 1; |
6 {%- elif field.kind|is_enum_kind -%} | 40 {%- elif field.kind|is_enum_kind -%} |
7 int32_t {{name}}; | 41 int32_t {{name}}; |
8 {%- else -%} | 42 {%- else -%} |
9 {{type}} {{name}}; | 43 {{type}} {{name}}; |
10 {%- endif %} | 44 {%- endif %} |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
46 {%- for pf in struct.packed.packed_fields if pf.field.kind|is_object_kind -%} | 80 {%- for pf in struct.packed.packed_fields if pf.field.kind|is_object_kind -%} |
47 if (!mojo::internal::Decode(&{{pf.field.name}}, message)) | 81 if (!mojo::internal::Decode(&{{pf.field.name}}, message)) |
48 return false; | 82 return false; |
49 {% endfor %} | 83 {% endfor %} |
50 {%- for pf in struct.packed.packed_fields if pf.field.kind|is_handle_kind -%} | 84 {%- for pf in struct.packed.packed_fields if pf.field.kind|is_handle_kind -%} |
51 if (!mojo::internal::DecodeHandle(&{{pf.field.name}}, | 85 if (!mojo::internal::DecodeHandle(&{{pf.field.name}}, |
52 message->mutable_handles())) | 86 message->mutable_handles())) |
53 return false; | 87 return false; |
54 {% endfor %} | 88 {% endfor %} |
55 {%- endmacro -%} | 89 {%- endmacro -%} |
OLD | NEW |