Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(243)

Side by Side Diff: mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl

Issue 289333002: Mojo cpp bindings: validation logic for incoming messages (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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 -%}
OLDNEW
« no previous file with comments | « mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698