Index: mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl |
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl |
index 308c8b67a5060845834470782594e599e915e6a6..d7ff69f16bad9e183305f808f2a1e905002ac939 100644 |
--- a/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl |
+++ b/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl |
@@ -221,16 +221,25 @@ bool {{class_name}}Stub::AcceptWithResponder( |
bool {{class_name}}RequestValidator::Accept(mojo::Message* message) { |
{%- if interface.methods %} |
+ if (message->has_flag(mojo::internal::kMessageIsResponse)) { |
+ ReportValidationError( |
+ 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
|
+ return false; |
+ } |
switch (message->header()->name) { |
{%- for method in interface.methods %} |
case internal::k{{class_name}}_{{method.name}}_Name: { |
{%- if method.response_parameters != None %} |
- if (!message->has_flag(mojo::internal::kMessageExpectsResponse)) |
- break; |
+ if (!message->has_flag(mojo::internal::kMessageExpectsResponse)) { |
+ ReportValidationError( |
+ mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAG_COMBINATION); |
+ return false; |
+ } |
{%- else %} |
- if (message->has_flag(mojo::internal::kMessageExpectsResponse) || |
- message->has_flag(mojo::internal::kMessageIsResponse)) { |
- break; |
+ if (message->has_flag(mojo::internal::kMessageExpectsResponse)) { |
+ ReportValidationError( |
+ mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAG_COMBINATION); |
+ return false; |
} |
{%- endif %} |
mojo::internal::BoundsChecker bounds_checker( |
@@ -243,6 +252,12 @@ bool {{class_name}}RequestValidator::Accept(mojo::Message* message) { |
break; |
} |
{%- endfor %} |
+ default: { |
+ // Unrecognized message. |
+ ReportValidationError( |
+ mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD); |
+ return false; |
+ } |
} |
{%- endif %} |
@@ -258,11 +273,14 @@ bool {{class_name}}RequestValidator::Accept(mojo::Message* message) { |
bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) { |
{%- if interface.methods %} |
+ if (!message->has_flag(mojo::internal::kMessageIsResponse)) { |
+ ReportValidationError( |
+ mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAG_COMBINATION); |
+ return false; |
+ } |
switch (message->header()->name) { |
{%- for method in interface.methods if method.response_parameters != None %} |
case internal::k{{class_name}}_{{method.name}}_Name: { |
- if (!message->has_flag(mojo::internal::kMessageIsResponse)) |
- break; |
mojo::internal::BoundsChecker bounds_checker( |
message->payload(), message->payload_num_bytes(), |
message->handles()->size()); |
@@ -273,6 +291,12 @@ bool {{class_name}}ResponseValidator::Accept(mojo::Message* message) { |
break; |
} |
{%- endfor %} |
+ default: { |
+ // Unrecognized message. |
+ ReportValidationError( |
+ mojo::internal::VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD); |
+ return false; |
+ } |
} |
{%- endif %} |