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

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: Fix test Created 5 years, 10 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
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 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 221
222 bool {{class_name}}RequestValidator::Accept(mojo::Message* message) { 222 bool {{class_name}}RequestValidator::Accept(mojo::Message* message) {
223 {%- if interface.methods %} 223 {%- if interface.methods %}
224 switch (message->header()->name) { 224 switch (message->header()->name) {
225 {%- for method in interface.methods %} 225 {%- for method in interface.methods %}
226 case internal::k{{class_name}}_{{method.name}}_Name: { 226 case internal::k{{class_name}}_{{method.name}}_Name: {
227 {%- if method.response_parameters != None %} 227 {%- if method.response_parameters != None %}
228 if (!message->has_flag(mojo::internal::kMessageExpectsResponse)) 228 if (!message->has_flag(mojo::internal::kMessageExpectsResponse))
229 break; 229 break;
230 {%- else %} 230 {%- else %}
231 if (message->has_flag(mojo::internal::kMessageExpectsResponse) || 231 if (message->has_flag(mojo::internal::kMessageExpectsResponse) ||
yzshen1 2015/02/23 19:08:02 Please remember to reject in this case as well as
232 message->has_flag(mojo::internal::kMessageIsResponse)) { 232 message->has_flag(mojo::internal::kMessageIsResponse)) {
233 break; 233 break;
234 } 234 }
235 {%- endif %} 235 {%- endif %}
236 mojo::internal::BoundsChecker bounds_checker( 236 mojo::internal::BoundsChecker bounds_checker(
237 message->payload(), message->payload_num_bytes(), 237 message->payload(), message->payload_num_bytes(),
238 message->handles()->size()); 238 message->handles()->size());
239 if (!internal::{{class_name}}_{{method.name}}_Params_Data::Validate( 239 if (!internal::{{class_name}}_{{method.name}}_Params_Data::Validate(
240 message->payload(), &bounds_checker)) { 240 message->payload(), &bounds_checker)) {
241 return false; 241 return false;
242 } 242 }
243 break; 243 break;
244 } 244 }
245 {%- endfor %} 245 {%- endfor %}
246 default: {
247 // Unrecognized message.
248 ReportValidationError(mojo::internal::VALIDATION_ERROR_UNKOWN_METHOD);
249 return false;
250 }
246 } 251 }
247 {%- endif %} 252 {%- endif %}
248 253
249 assert(sink_); 254 assert(sink_);
250 return sink_->Accept(message); 255 return sink_->Accept(message);
251 } 256 }
252 257
253 {#--- Response validator definitions #} 258 {#--- Response validator definitions #}
254 {% if interface|has_callbacks %} 259 {% if interface|has_callbacks %}
255 {{class_name}}ResponseValidator::{{class_name}}ResponseValidator( 260 {{class_name}}ResponseValidator::{{class_name}}ResponseValidator(
256 mojo::MessageReceiver* sink) : MessageFilter(sink) { 261 mojo::MessageReceiver* sink) : MessageFilter(sink) {
257 } 262 }
258 263
259 bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) { 264 bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) {
260 {%- if interface.methods %} 265 {%- if interface.methods %}
261 switch (message->header()->name) { 266 switch (message->header()->name) {
262 {%- for method in interface.methods if method.response_parameters != None %} 267 {%- for method in interface.methods if method.response_parameters != None %}
263 case internal::k{{class_name}}_{{method.name}}_Name: { 268 case internal::k{{class_name}}_{{method.name}}_Name: {
264 if (!message->has_flag(mojo::internal::kMessageIsResponse)) 269 if (!message->has_flag(mojo::internal::kMessageIsResponse))
yzshen1 2015/02/23 19:08:02 ditto
265 break; 270 break;
266 mojo::internal::BoundsChecker bounds_checker( 271 mojo::internal::BoundsChecker bounds_checker(
267 message->payload(), message->payload_num_bytes(), 272 message->payload(), message->payload_num_bytes(),
268 message->handles()->size()); 273 message->handles()->size());
269 if (!internal::{{class_name}}_{{method.name}}_ResponseParams_Data::Validat e( 274 if (!internal::{{class_name}}_{{method.name}}_ResponseParams_Data::Validat e(
270 message->payload(), &bounds_checker)) { 275 message->payload(), &bounds_checker)) {
271 return false; 276 return false;
272 } 277 }
273 break; 278 break;
274 } 279 }
275 {%- endfor %} 280 {%- endfor %}
281 default: {
282 // Unrecognized message.
283 ReportValidationError(mojo::internal::VALIDATION_ERROR_UNKOWN_METHOD);
284 return false;
285 }
276 } 286 }
277 {%- endif %} 287 {%- endif %}
278 288
279 assert(sink_); 289 assert(sink_);
280 return sink_->Accept(message); 290 return sink_->Accept(message);
281 } 291 }
282 {%- endif -%} 292 {%- endif -%}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698