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

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

Issue 494943004: Mojo C++ bindings: better log messages for some validation errors at the receiver side. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 4 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/cpp/bindings/lib/validation_errors.cc ('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) %} 1 {%- macro validate(struct, class_name) %}
2 if (!data) 2 if (!data)
3 return true; 3 return true;
4 4
5 if (!ValidateStructHeader( 5 if (!ValidateStructHeader(
6 data, sizeof({{class_name}}), 6 data, sizeof({{class_name}}),
7 {{struct.packed.packed_fields|length}}, bounds_checker)) { 7 {{struct.packed.packed_fields|length}}, bounds_checker)) {
8 return false; 8 return false;
9 } 9 }
10 10
11 const {{class_name}}* MOJO_ALLOW_UNUSED object = 11 const {{class_name}}* MOJO_ALLOW_UNUSED object =
12 static_cast<const {{class_name}}*>(data); 12 static_cast<const {{class_name}}*>(data);
13 13
14 {%- for packed_field in struct.packed.packed_fields %} 14 {%- for packed_field in struct.packed.packed_fields %}
15 {%- set name = packed_field.field.name %} 15 {%- set name = packed_field.field.name %}
16 {%- set kind = packed_field.field.kind %} 16 {%- set kind = packed_field.field.kind %}
17 {%- if kind|is_object_kind %} 17 {%- if kind|is_object_kind %}
18 {%- set wrapper_type = kind|cpp_wrapper_type %} 18 {%- set wrapper_type = kind|cpp_wrapper_type %}
19 {%- if not kind|is_nullable_kind %} 19 {%- if not kind|is_nullable_kind %}
20 if (!object->{{name}}.offset) { 20 if (!object->{{name}}.offset) {
21 ReportValidationError( 21 ReportValidationError(
22 mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER); 22 mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
23 "null {{name}} field in {{struct.name}} struct");
23 return false; 24 return false;
24 } 25 }
25 {%- endif %} 26 {%- endif %}
26 if (!mojo::internal::ValidateEncodedPointer(&object->{{name}}.offset)) { 27 if (!mojo::internal::ValidateEncodedPointer(&object->{{name}}.offset)) {
27 ReportValidationError(mojo::internal::VALIDATION_ERROR_ILLEGAL_POINTER); 28 ReportValidationError(mojo::internal::VALIDATION_ERROR_ILLEGAL_POINTER);
28 return false; 29 return false;
29 } 30 }
30 {%- if kind|is_any_array_kind or kind|is_string_kind %} 31 {%- if kind|is_any_array_kind or kind|is_string_kind %}
31 if (!{{wrapper_type}}::Data_::Validate< 32 if (!{{wrapper_type}}::Data_::Validate<
32 {{kind|get_array_validate_params|indent(10)}}>( 33 {{kind|get_array_validate_params|indent(10)}}>(
33 mojo::internal::DecodePointerRaw(&object->{{name}}.offset), 34 mojo::internal::DecodePointerRaw(&object->{{name}}.offset),
34 bounds_checker)) { 35 bounds_checker)) {
35 {%- else %} 36 {%- else %}
36 if (!{{wrapper_type}}::Data_::Validate( 37 if (!{{wrapper_type}}::Data_::Validate(
37 mojo::internal::DecodePointerRaw(&object->{{name}}.offset), 38 mojo::internal::DecodePointerRaw(&object->{{name}}.offset),
38 bounds_checker)) { 39 bounds_checker)) {
39 {%- endif %} 40 {%- endif %}
40 return false; 41 return false;
41 } 42 }
42 {%- elif kind|is_any_handle_kind %} 43 {%- elif kind|is_any_handle_kind %}
43 {%- if not kind|is_nullable_kind %} 44 {%- if not kind|is_nullable_kind %}
44 if (object->{{name}}.value() == mojo::internal::kEncodedInvalidHandleValue) { 45 if (object->{{name}}.value() == mojo::internal::kEncodedInvalidHandleValue) {
45 ReportValidationError( 46 ReportValidationError(
46 mojo::internal::VALIDATION_ERROR_UNEXPECTED_INVALID_HANDLE); 47 mojo::internal::VALIDATION_ERROR_UNEXPECTED_INVALID_HANDLE,
48 "invalid {{name}} field in {{struct.name}} struct");
47 return false; 49 return false;
48 } 50 }
49 {%- endif %} 51 {%- endif %}
50 if (!bounds_checker->ClaimHandle(object->{{name}})) { 52 if (!bounds_checker->ClaimHandle(object->{{name}})) {
51 ReportValidationError(mojo::internal::VALIDATION_ERROR_ILLEGAL_HANDLE); 53 ReportValidationError(mojo::internal::VALIDATION_ERROR_ILLEGAL_HANDLE);
52 return false; 54 return false;
53 } 55 }
54 {%- endif %} 56 {%- endif %}
55 {%- endfor %} 57 {%- endfor %}
56 58
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 106
105 {%- macro decodes(struct) -%} 107 {%- macro decodes(struct) -%}
106 {%- for pf in struct.packed.packed_fields %} 108 {%- for pf in struct.packed.packed_fields %}
107 {%- if pf.field.kind|is_object_kind %} 109 {%- if pf.field.kind|is_object_kind %}
108 mojo::internal::Decode(&{{pf.field.name}}, handles); 110 mojo::internal::Decode(&{{pf.field.name}}, handles);
109 {%- elif pf.field.kind|is_any_handle_kind %} 111 {%- elif pf.field.kind|is_any_handle_kind %}
110 mojo::internal::DecodeHandle(&{{pf.field.name}}, handles); 112 mojo::internal::DecodeHandle(&{{pf.field.name}}, handles);
111 {%- endif %} 113 {%- endif %}
112 {%- endfor %} 114 {%- endfor %}
113 {%- endmacro -%} 115 {%- endmacro -%}
OLDNEW
« no previous file with comments | « mojo/public/cpp/bindings/lib/validation_errors.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698