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

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: Fixes spelling error. Created 5 years, 9 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 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 } 214 }
215 215
216 {#--- Request validator definitions #} 216 {#--- Request validator definitions #}
217 217
218 {{class_name}}RequestValidator::{{class_name}}RequestValidator( 218 {{class_name}}RequestValidator::{{class_name}}RequestValidator(
219 mojo::MessageReceiver* sink) : MessageFilter(sink) { 219 mojo::MessageReceiver* sink) : MessageFilter(sink) {
220 } 220 }
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 if (message->has_flag(mojo::internal::kMessageIsResponse)) {
225 ReportValidationError(
226 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAG_COMBINATION );
yzshen1 2015/03/03 18:05:37 (1) Do you think we should rename this error? -- b
rudominer 2015/03/04 00:12:01 Let's do this in a separate CL. I filed b/463684
227 return false;
228 }
224 switch (message->header()->name) { 229 switch (message->header()->name) {
225 {%- for method in interface.methods %} 230 {%- for method in interface.methods %}
226 case internal::k{{class_name}}_{{method.name}}_Name: { 231 case internal::k{{class_name}}_{{method.name}}_Name: {
227 {%- if method.response_parameters != None %} 232 {%- if method.response_parameters != None %}
228 if (!message->has_flag(mojo::internal::kMessageExpectsResponse)) 233 if (!message->has_flag(mojo::internal::kMessageExpectsResponse)) {
229 break; 234 ReportValidationError(
235 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAG_COMBINA TION);
236 return false;
237 }
230 {%- else %} 238 {%- else %}
231 if (message->has_flag(mojo::internal::kMessageExpectsResponse) || 239 if (message->has_flag(mojo::internal::kMessageExpectsResponse)) {
232 message->has_flag(mojo::internal::kMessageIsResponse)) { 240 ReportValidationError(
233 break; 241 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAG_COMBINA TION);
242 return false;
234 } 243 }
235 {%- endif %} 244 {%- endif %}
236 mojo::internal::BoundsChecker bounds_checker( 245 mojo::internal::BoundsChecker bounds_checker(
237 message->payload(), message->payload_num_bytes(), 246 message->payload(), message->payload_num_bytes(),
238 message->handles()->size()); 247 message->handles()->size());
239 if (!internal::{{class_name}}_{{method.name}}_Params_Data::Validate( 248 if (!internal::{{class_name}}_{{method.name}}_Params_Data::Validate(
240 message->payload(), &bounds_checker)) { 249 message->payload(), &bounds_checker)) {
241 return false; 250 return false;
242 } 251 }
243 break; 252 break;
244 } 253 }
245 {%- endfor %} 254 {%- endfor %}
255 default: {
256 // Unrecognized message.
257 ReportValidationError(
258 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD);
259 return false;
260 }
246 } 261 }
247 {%- endif %} 262 {%- endif %}
248 263
249 assert(sink_); 264 assert(sink_);
250 return sink_->Accept(message); 265 return sink_->Accept(message);
251 } 266 }
252 267
253 {#--- Response validator definitions #} 268 {#--- Response validator definitions #}
254 {% if interface|has_callbacks %} 269 {% if interface|has_callbacks %}
255 {{class_name}}ResponseValidator::{{class_name}}ResponseValidator( 270 {{class_name}}ResponseValidator::{{class_name}}ResponseValidator(
256 mojo::MessageReceiver* sink) : MessageFilter(sink) { 271 mojo::MessageReceiver* sink) : MessageFilter(sink) {
257 } 272 }
258 273
259 bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) { 274 bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) {
260 {%- if interface.methods %} 275 {%- if interface.methods %}
276 if (!message->has_flag(mojo::internal::kMessageIsResponse)) {
277 ReportValidationError(
278 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAG_COMBINATION );
279 return false;
280 }
261 switch (message->header()->name) { 281 switch (message->header()->name) {
262 {%- for method in interface.methods if method.response_parameters != None %} 282 {%- for method in interface.methods if method.response_parameters != None %}
263 case internal::k{{class_name}}_{{method.name}}_Name: { 283 case internal::k{{class_name}}_{{method.name}}_Name: {
264 if (!message->has_flag(mojo::internal::kMessageIsResponse))
265 break;
266 mojo::internal::BoundsChecker bounds_checker( 284 mojo::internal::BoundsChecker bounds_checker(
267 message->payload(), message->payload_num_bytes(), 285 message->payload(), message->payload_num_bytes(),
268 message->handles()->size()); 286 message->handles()->size());
269 if (!internal::{{class_name}}_{{method.name}}_ResponseParams_Data::Validat e( 287 if (!internal::{{class_name}}_{{method.name}}_ResponseParams_Data::Validat e(
270 message->payload(), &bounds_checker)) { 288 message->payload(), &bounds_checker)) {
271 return false; 289 return false;
272 } 290 }
273 break; 291 break;
274 } 292 }
275 {%- endfor %} 293 {%- endfor %}
294 default: {
295 // Unrecognized message.
296 ReportValidationError(
297 mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD);
298 return false;
299 }
276 } 300 }
277 {%- endif %} 301 {%- endif %}
278 302
279 assert(sink_); 303 assert(sink_);
280 return sink_->Accept(message); 304 return sink_->Accept(message);
281 } 305 }
282 {%- endif -%} 306 {%- endif -%}
OLDNEW
« mojo/public/js/validation_unittests.js ('K') | « mojo/public/js/validation_unittests.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698