| 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 %}
|
|
|
|
|