summaryrefslogtreecommitdiffstats
path: root/mojo
diff options
context:
space:
mode:
authoryzshen@chromium.org <yzshen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-01 12:17:34 +0000
committeryzshen@chromium.org <yzshen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-01 12:17:34 +0000
commite71a89427c735ce43b7ac69c439be962c7b2fe54 (patch)
tree638dada387de4ae4f98b0edc7ae67b0c7a54156d /mojo
parentb5e4aba0eb9c13742b4ef4ac475987c4845b7f61 (diff)
downloadchromium_src-e71a89427c735ce43b7ac69c439be962c7b2fe54.zip
chromium_src-e71a89427c735ce43b7ac69c439be962c7b2fe54.tar.gz
chromium_src-e71a89427c735ce43b7ac69c439be962c7b2fe54.tar.bz2
Make mojo message building and validation follow the depth-first traversal order.
With this CL, the encoded handles will comply with the restriction that "If handle X is prior to handle Y in the depth-first traversal order and both of them are valid, then the value of X should be smaller than that of Y." BUG=None TEST=None Review URL: https://codereview.chromium.org/303163006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@274111 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'mojo')
-rw-r--r--mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl30
1 files changed, 15 insertions, 15 deletions
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 4d586f7..e1596d0 100644
--- a/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl
+++ b/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl
@@ -11,22 +11,20 @@
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 %}
+{%- for packed_field in struct.packed.packed_fields %}
{%- set name = packed_field.field.name %}
+{%- if packed_field.field.kind|is_object_kind %}
+{%- set wrapper_type = packed_field.field.kind|cpp_wrapper_type %}
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 %}
+{%- elif packed_field.field.kind|is_handle_kind %}
if (!bounds_checker->ClaimHandle(object->{{name}}))
return false;
+{%- endif %}
{%- endfor %}
return true;
@@ -68,19 +66,21 @@
{%- endmacro %}
{%- macro encodes(struct) -%}
-{%- for pf in struct.packed.packed_fields if pf.field.kind|is_object_kind -%}
+{%- for pf in struct.packed.packed_fields %}
+{%- if pf.field.kind|is_object_kind %}
mojo::internal::Encode(&{{pf.field.name}}, handles);
-{% endfor %}
-{%- for pf in struct.packed.packed_fields if pf.field.kind|is_handle_kind -%}
+{%- elif pf.field.kind|is_handle_kind %}
mojo::internal::EncodeHandle(&{{pf.field.name}}, handles);
-{% endfor %}
+{%- endif %}
+{%- endfor %}
{%- endmacro -%}
{%- macro decodes(struct) -%}
-{%- for pf in struct.packed.packed_fields if pf.field.kind|is_object_kind -%}
+{%- for pf in struct.packed.packed_fields %}
+{%- if pf.field.kind|is_object_kind %}
mojo::internal::Decode(&{{pf.field.name}}, handles);
-{% endfor %}
-{%- for pf in struct.packed.packed_fields if pf.field.kind|is_handle_kind -%}
+{%- elif pf.field.kind|is_handle_kind %}
mojo::internal::DecodeHandle(&{{pf.field.name}}, handles);
-{% endfor %}
+{%- endif %}
+{%- endfor %}
{%- endmacro -%}