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

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: simplify BoundsChecker 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
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 setters(struct) %} 35 {%- macro setters(struct) %}
2 {% for packed_field in struct.packed.packed_fields %} 36 {% for packed_field in struct.packed.packed_fields %}
3 {%- set type = packed_field.field.kind|cpp_type %} 37 {%- set type = packed_field.field.kind|cpp_type %}
4 {%- set name = packed_field.field.name %} 38 {%- set name = packed_field.field.name %}
5 {%- if packed_field.field.kind|is_object_kind %} 39 {%- if packed_field.field.kind|is_object_kind %}
6 void set_{{name}}({{type}} {{name}}) { {{name}}_.ptr = {{name}}; } 40 void set_{{name}}({{type}} {{name}}) { {{name}}_.ptr = {{name}}; }
7 {%- else %} 41 {%- else %}
8 void set_{{name}}({{type}} {{name}}) { {{name}}_ = {{name}}; } 42 void set_{{name}}({{type}} {{name}}) { {{name}}_ = {{name}}; }
9 {%- endif %} 43 {%- endif %}
10 {%- endfor %} 44 {%- endfor %}
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 {%- for pf in struct.packed.packed_fields if pf.field.kind|is_object_kind -%} 108 {%- for pf in struct.packed.packed_fields if pf.field.kind|is_object_kind -%}
75 if (!mojo::internal::Decode(&{{pf.field.name}}_, message)) 109 if (!mojo::internal::Decode(&{{pf.field.name}}_, message))
76 return false; 110 return false;
77 {% endfor %} 111 {% endfor %}
78 {%- for pf in struct.packed.packed_fields if pf.field.kind|is_handle_kind -%} 112 {%- for pf in struct.packed.packed_fields if pf.field.kind|is_handle_kind -%}
79 if (!mojo::internal::DecodeHandle(&{{pf.field.name}}_, 113 if (!mojo::internal::DecodeHandle(&{{pf.field.name}}_,
80 message->mutable_handles())) 114 message->mutable_handles()))
81 return false; 115 return false;
82 {% endfor %} 116 {% endfor %}
83 {%- endmacro -%} 117 {%- endmacro -%}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698