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

Unified 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, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mojo/public/tools/bindings/generators/cpp_templates/struct_definition.tmpl ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl
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 96be82fc0663766436b5e9dd0cc9d98fd1c70f2b..1897a4924a792e6ed53f184843b88fdf0303b4b1 100644
--- a/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl
+++ b/mojo/public/tools/bindings/generators/cpp_templates/struct_macros.tmpl
@@ -1,3 +1,37 @@
+{%- macro validate(struct, class_name) %}
+ if (!data)
+ return true;
+
+ if (!ValidateStructHeader(
+ data, sizeof({{class_name}}),
+ {{struct.packed.packed_fields|length}}, bounds_checker)) {
+ return false;
+ }
+
+ 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 %}
+{%- set name = packed_field.field.name %}
+ 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 %}
+ if (!bounds_checker->ClaimHandle(object->{{name}}))
+ return false;
+{%- endfor %}
+
+ return true;
+{%- endmacro %}
+
{%- macro field_line(field) %}
{%- set type = field.kind|cpp_field_type %}
{%- set name = field.name -%}
« 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