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

Side by Side Diff: mojo/public/tools/bindings/generators/cpp_templates/interface_definition.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, 6 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
OLDNEW
1 {%- import "interface_macros.tmpl" as interface_macros %} 1 {%- import "interface_macros.tmpl" as interface_macros %}
2 {%- set class_name = interface.name %} 2 {%- set class_name = interface.name %}
3 {%- set proxy_name = interface.name ~ "Proxy" %} 3 {%- set proxy_name = interface.name ~ "Proxy" %}
4 4
5 {%- macro alloc_params(parameters) %} 5 {%- macro alloc_params(parameters) %}
6 {%- for param in parameters %} 6 {%- for param in parameters %}
7 {%- if param.kind|is_object_kind %} 7 {%- if param.kind|is_object_kind %}
8 {{param.kind|cpp_result_type}} p{{loop.index}}; 8 {{param.kind|cpp_result_type}} p{{loop.index}};
9 Deserialize_(params->{{param.name}}.ptr, &p{{loop.index}}); 9 Deserialize_(params->{{param.name}}.ptr, &p{{loop.index}});
10 {% endif -%} 10 {% endif -%}
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
250 return false; 250 return false;
251 } 251 }
252 252
253 {#--- Request validator definitions #} 253 {#--- Request validator definitions #}
254 254
255 {{class_name}}RequestValidator::{{class_name}}RequestValidator( 255 {{class_name}}RequestValidator::{{class_name}}RequestValidator(
256 mojo::MessageReceiver* sink) : MessageFilter(sink) { 256 mojo::MessageReceiver* sink) : MessageFilter(sink) {
257 } 257 }
258 258
259 bool {{class_name}}RequestValidator::Accept(mojo::Message* message) { 259 bool {{class_name}}RequestValidator::Accept(mojo::Message* message) {
260 // TODO(yzshen): implement validation logic. 260 {%- if interface.methods %}
261 switch (message->header()->name) {
262 {%- for method in interface.methods %}
263 case internal::k{{class_name}}_{{method.name}}_Name: {
264 {%- if method.response_parameters != None %}
265 if (!message->has_flag(mojo::internal::kMessageExpectsResponse))
266 break;
267 {%- else %}
268 if (message->has_flag(mojo::internal::kMessageExpectsResponse) ||
269 message->has_flag(mojo::internal::kMessageIsResponse)) {
270 break;
271 }
272 {%- endif %}
273 mojo::internal::BoundsChecker bounds_checker(
274 message->payload(), message->payload_num_bytes(),
275 message->handles()->size());
276 if (!internal::{{class_name}}_{{method.name}}_Params_Data::Validate(
277 message->payload(), &bounds_checker)) {
278 return false;
279 }
280 break;
281 }
282 {%- endfor %}
283 }
284 {%- endif %}
285
261 return sink_->Accept(message); 286 return sink_->Accept(message);
262 } 287 }
263 288
264 {#--- Response validator definitions #} 289 {#--- Response validator definitions #}
265 {% if interface|has_callbacks %} 290 {% if interface|has_callbacks %}
266 {{class_name}}ResponseValidator::{{class_name}}ResponseValidator( 291 {{class_name}}ResponseValidator::{{class_name}}ResponseValidator(
267 mojo::MessageReceiver* sink) : MessageFilter(sink) { 292 mojo::MessageReceiver* sink) : MessageFilter(sink) {
268 } 293 }
269 294
270 bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) { 295 bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) {
271 // TODO(yzshen): implement validation logic. 296 {%- if interface.methods %}
297 switch (message->header()->name) {
298 {%- for method in interface.methods if method.response_parameters != None %}
299 case internal::k{{class_name}}_{{method.name}}_Name: {
300 if (!message->has_flag(mojo::internal::kMessageIsResponse))
301 break;
302 mojo::internal::BoundsChecker bounds_checker(
303 message->payload(), message->payload_num_bytes(),
304 message->handles()->size());
305 if (!internal::{{class_name}}_{{method.name}}_ResponseParams_Data::Validat e(
306 message->payload(), &bounds_checker)) {
307 return false;
308 }
309 break;
310 }
311 {%- endfor %}
312 }
313 {%- endif %}
314
272 return sink_->Accept(message); 315 return sink_->Accept(message);
273 } 316 }
274 {%- endif -%} 317 {%- endif -%}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698