diff options
author | yzshen@chromium.org <yzshen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-01 12:17:34 +0000 |
---|---|---|
committer | yzshen@chromium.org <yzshen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-01 12:17:34 +0000 |
commit | e71a89427c735ce43b7ac69c439be962c7b2fe54 (patch) | |
tree | 638dada387de4ae4f98b0edc7ae67b0c7a54156d /mojo | |
parent | b5e4aba0eb9c13742b4ef4ac475987c4845b7f61 (diff) | |
download | chromium_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.tmpl | 30 |
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 -%} |