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 5214df9cfcc6bfb2cc8645ce8c53ff5f9b5080f8..5831423ef07875459b3f6bff18f0a33c50352b29 100644 |
--- a/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl |
+++ b/mojo/public/tools/bindings/generators/cpp_templates/interface_definition.tmpl |
@@ -227,16 +227,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); |
+ 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( |
@@ -249,6 +258,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 %} |
@@ -264,11 +279,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()); |
@@ -279,6 +297,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 %} |