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

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

Issue 921223002: Cpp bindings: Return false from Validator::Accept() on unrecognized message or invalid flags (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: rebased Created 5 years, 8 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
« no previous file with comments | « mojo/public/js/validation_unittests.js ('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 {%- import "interface_macros.tmpl" as interface_macros %} 1 {%- import "interface_macros.tmpl" as interface_macros %}
2 {%- import "struct_macros.tmpl" as struct_macros %} 2 {%- import "struct_macros.tmpl" as struct_macros %}
3 {%- set class_name = interface.name %} 3 {%- set class_name = interface.name %}
4 {%- set proxy_name = interface.name ~ "Proxy" %} 4 {%- set proxy_name = interface.name ~ "Proxy" %}
5 {%- set namespace_as_string = "%s"|format(namespace|replace(".","::")) %} 5 {%- set namespace_as_string = "%s"|format(namespace|replace(".","::")) %}
6 6
7 {%- macro alloc_params(struct) %} 7 {%- macro alloc_params(struct) %}
8 {%- for param in struct.packed.packed_fields_in_ordinal_order %} 8 {%- for param in struct.packed.packed_fields_in_ordinal_order %}
9 {{param.field.kind|cpp_result_type}} p_{{param.field.name}}{}; 9 {{param.field.kind|cpp_result_type}} p_{{param.field.name}}{};
10 {%- endfor %} 10 {%- endfor %}
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 } 220 }
221 221
222 {#--- Request validator definitions #} 222 {#--- Request validator definitions #}
223 223
224 {{class_name}}RequestValidator::{{class_name}}RequestValidator( 224 {{class_name}}RequestValidator::{{class_name}}RequestValidator(
225 mojo::MessageReceiver* sink) : MessageFilter(sink) { 225 mojo::MessageReceiver* sink) : MessageFilter(sink) {
226 } 226 }
227 227
228 bool {{class_name}}RequestValidator::Accept(mojo::Message* message) { 228 bool {{class_name}}RequestValidator::Accept(mojo::Message* message) {
229 {%- if interface.methods %} 229 {%- if interface.methods %}
230 if (message->has_flag(mojo::internal::kMessageIsResponse)) {
231 ReportValidationError(
232 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAG_COMBINATION );
233 return false;
234 }
230 switch (message->header()->name) { 235 switch (message->header()->name) {
231 {%- for method in interface.methods %} 236 {%- for method in interface.methods %}
232 case internal::k{{class_name}}_{{method.name}}_Name: { 237 case internal::k{{class_name}}_{{method.name}}_Name: {
233 {%- if method.response_parameters != None %} 238 {%- if method.response_parameters != None %}
234 if (!message->has_flag(mojo::internal::kMessageExpectsResponse)) 239 if (!message->has_flag(mojo::internal::kMessageExpectsResponse)) {
235 break; 240 ReportValidationError(
241 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAG_COMBINA TION);
242 return false;
243 }
236 {%- else %} 244 {%- else %}
237 if (message->has_flag(mojo::internal::kMessageExpectsResponse) || 245 if (message->has_flag(mojo::internal::kMessageExpectsResponse)) {
238 message->has_flag(mojo::internal::kMessageIsResponse)) { 246 ReportValidationError(
239 break; 247 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAG_COMBINA TION);
248 return false;
240 } 249 }
241 {%- endif %} 250 {%- endif %}
242 mojo::internal::BoundsChecker bounds_checker( 251 mojo::internal::BoundsChecker bounds_checker(
243 message->payload(), message->payload_num_bytes(), 252 message->payload(), message->payload_num_bytes(),
244 message->handles()->size()); 253 message->handles()->size());
245 if (!internal::{{class_name}}_{{method.name}}_Params_Data::Validate( 254 if (!internal::{{class_name}}_{{method.name}}_Params_Data::Validate(
246 message->payload(), &bounds_checker)) { 255 message->payload(), &bounds_checker)) {
247 return false; 256 return false;
248 } 257 }
249 break; 258 break;
250 } 259 }
251 {%- endfor %} 260 {%- endfor %}
261 default: {
262 // Unrecognized message.
263 ReportValidationError(
264 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD);
265 return false;
266 }
252 } 267 }
253 {%- endif %} 268 {%- endif %}
254 269
255 assert(sink_); 270 assert(sink_);
256 return sink_->Accept(message); 271 return sink_->Accept(message);
257 } 272 }
258 273
259 {#--- Response validator definitions #} 274 {#--- Response validator definitions #}
260 {% if interface|has_callbacks %} 275 {% if interface|has_callbacks %}
261 {{class_name}}ResponseValidator::{{class_name}}ResponseValidator( 276 {{class_name}}ResponseValidator::{{class_name}}ResponseValidator(
262 mojo::MessageReceiver* sink) : MessageFilter(sink) { 277 mojo::MessageReceiver* sink) : MessageFilter(sink) {
263 } 278 }
264 279
265 bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) { 280 bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) {
266 {%- if interface.methods %} 281 {%- if interface.methods %}
282 if (!message->has_flag(mojo::internal::kMessageIsResponse)) {
283 ReportValidationError(
284 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAG_COMBINATION );
285 return false;
286 }
267 switch (message->header()->name) { 287 switch (message->header()->name) {
268 {%- for method in interface.methods if method.response_parameters != None %} 288 {%- for method in interface.methods if method.response_parameters != None %}
269 case internal::k{{class_name}}_{{method.name}}_Name: { 289 case internal::k{{class_name}}_{{method.name}}_Name: {
270 if (!message->has_flag(mojo::internal::kMessageIsResponse))
271 break;
272 mojo::internal::BoundsChecker bounds_checker( 290 mojo::internal::BoundsChecker bounds_checker(
273 message->payload(), message->payload_num_bytes(), 291 message->payload(), message->payload_num_bytes(),
274 message->handles()->size()); 292 message->handles()->size());
275 if (!internal::{{class_name}}_{{method.name}}_ResponseParams_Data::Validat e( 293 if (!internal::{{class_name}}_{{method.name}}_ResponseParams_Data::Validat e(
276 message->payload(), &bounds_checker)) { 294 message->payload(), &bounds_checker)) {
277 return false; 295 return false;
278 } 296 }
279 break; 297 break;
280 } 298 }
281 {%- endfor %} 299 {%- endfor %}
300 default: {
301 // Unrecognized message.
302 ReportValidationError(
303 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD);
304 return false;
305 }
282 } 306 }
283 {%- endif %} 307 {%- endif %}
284 308
285 assert(sink_); 309 assert(sink_);
286 return sink_->Accept(message); 310 return sink_->Accept(message);
287 } 311 }
288 {%- endif -%} 312 {%- endif -%}
OLDNEW
« no previous file with comments | « mojo/public/js/validation_unittests.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698