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

Side by Side Diff: mojo/public/cpp/bindings/lib/message_header_validator.cc

Issue 2114523002: Move more Mojo bindings helpers out of internal namespace (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@group-controller
Patch Set: rebase Created 4 years, 5 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 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "mojo/public/cpp/bindings/lib/message_header_validator.h" 5 #include "mojo/public/cpp/bindings/message_header_validator.h"
6 6
7 #include "mojo/public/cpp/bindings/lib/validation_context.h" 7 #include "mojo/public/cpp/bindings/lib/validation_context.h"
8 #include "mojo/public/cpp/bindings/lib/validation_errors.h" 8 #include "mojo/public/cpp/bindings/lib/validation_errors.h"
9 #include "mojo/public/cpp/bindings/lib/validation_util.h" 9 #include "mojo/public/cpp/bindings/lib/validation_util.h"
10 10
11 namespace mojo { 11 namespace mojo {
12 namespace internal {
13 namespace { 12 namespace {
14 13
15 bool IsValidMessageHeader(const MessageHeader* header, 14 bool IsValidMessageHeader(const internal::MessageHeader* header,
16 ValidationContext* validation_context) { 15 internal::ValidationContext* validation_context) {
17 // NOTE: Our goal is to preserve support for future extension of the message 16 // NOTE: Our goal is to preserve support for future extension of the message
18 // header. If we encounter fields we do not understand, we must ignore them. 17 // header. If we encounter fields we do not understand, we must ignore them.
19 18
20 // Extra validation of the struct header: 19 // Extra validation of the struct header:
21 if (header->version == 0) { 20 if (header->version == 0) {
22 if (header->num_bytes != sizeof(MessageHeader)) { 21 if (header->num_bytes != sizeof(internal::MessageHeader)) {
23 ReportValidationError(validation_context, 22 internal::ReportValidationError(
24 VALIDATION_ERROR_UNEXPECTED_STRUCT_HEADER); 23 validation_context,
24 internal::VALIDATION_ERROR_UNEXPECTED_STRUCT_HEADER);
25 return false; 25 return false;
26 } 26 }
27 } else if (header->version == 1) { 27 } else if (header->version == 1) {
28 if (header->num_bytes != sizeof(MessageHeaderWithRequestID)) { 28 if (header->num_bytes != sizeof(internal::MessageHeaderWithRequestID)) {
29 ReportValidationError(validation_context, 29 internal::ReportValidationError(
30 VALIDATION_ERROR_UNEXPECTED_STRUCT_HEADER); 30 validation_context,
31 internal::VALIDATION_ERROR_UNEXPECTED_STRUCT_HEADER);
31 return false; 32 return false;
32 } 33 }
33 } else if (header->version > 1) { 34 } else if (header->version > 1) {
34 if (header->num_bytes < sizeof(MessageHeaderWithRequestID)) { 35 if (header->num_bytes < sizeof(internal::MessageHeaderWithRequestID)) {
35 ReportValidationError(validation_context, 36 internal::ReportValidationError(
36 VALIDATION_ERROR_UNEXPECTED_STRUCT_HEADER); 37 validation_context,
38 internal::VALIDATION_ERROR_UNEXPECTED_STRUCT_HEADER);
37 return false; 39 return false;
38 } 40 }
39 } 41 }
40 42
41 // Validate flags (allow unknown bits): 43 // Validate flags (allow unknown bits):
42 44
43 // These flags require a RequestID. 45 // These flags require a RequestID.
44 if (header->version < 1 && ((header->flags & kMessageExpectsResponse) || 46 if (header->version < 1 && ((header->flags & Message::kFlagExpectsResponse) ||
45 (header->flags & kMessageIsResponse))) { 47 (header->flags & Message::kFlagIsResponse))) {
46 ReportValidationError(validation_context, 48 internal::ReportValidationError(
47 VALIDATION_ERROR_MESSAGE_HEADER_MISSING_REQUEST_ID); 49 validation_context,
50 internal::VALIDATION_ERROR_MESSAGE_HEADER_MISSING_REQUEST_ID);
48 return false; 51 return false;
49 } 52 }
50 53
51 // These flags are mutually exclusive. 54 // These flags are mutually exclusive.
52 if ((header->flags & kMessageExpectsResponse) && 55 if ((header->flags & Message::kFlagExpectsResponse) &&
53 (header->flags & kMessageIsResponse)) { 56 (header->flags & Message::kFlagIsResponse)) {
54 ReportValidationError(validation_context, 57 internal::ReportValidationError(
55 VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAGS); 58 validation_context,
59 internal::VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAGS);
56 return false; 60 return false;
57 } 61 }
58 62
59 return true; 63 return true;
60 } 64 }
61 65
62 } // namespace 66 } // namespace
63 67
64 MessageHeaderValidator::MessageHeaderValidator(MessageReceiver* sink) 68 MessageHeaderValidator::MessageHeaderValidator(MessageReceiver* sink)
65 : MessageHeaderValidator("MessageHeaderValidator", sink) {} 69 : MessageHeaderValidator("MessageHeaderValidator", sink) {}
66 70
67 MessageHeaderValidator::MessageHeaderValidator(const std::string& description, 71 MessageHeaderValidator::MessageHeaderValidator(const std::string& description,
68 MessageReceiver* sink) 72 MessageReceiver* sink)
69 : MessageFilter(sink), description_(description) { 73 : MessageFilter(sink), description_(description) {
70 } 74 }
71 75
72 void MessageHeaderValidator::SetDescription(const std::string& description) { 76 void MessageHeaderValidator::SetDescription(const std::string& description) {
73 description_ = description; 77 description_ = description;
74 } 78 }
75 79
76 bool MessageHeaderValidator::Accept(Message* message) { 80 bool MessageHeaderValidator::Accept(Message* message) {
77 // Pass 0 as number of handles because we don't expect any in the header, even 81 // Pass 0 as number of handles because we don't expect any in the header, even
78 // if |message| contains handles. 82 // if |message| contains handles.
79 ValidationContext validation_context( 83 internal::ValidationContext validation_context(
80 message->data(), message->data_num_bytes(), 0, message, description_); 84 message->data(), message->data_num_bytes(), 0, message, description_);
81 85
82 if (!ValidateStructHeaderAndClaimMemory(message->data(), &validation_context)) 86 if (!internal::ValidateStructHeaderAndClaimMemory(message->data(),
87 &validation_context))
83 return false; 88 return false;
84 89
85 if (!IsValidMessageHeader(message->header(), &validation_context)) 90 if (!IsValidMessageHeader(message->header(), &validation_context))
86 return false; 91 return false;
87 92
88 return sink_->Accept(message); 93 return sink_->Accept(message);
89 } 94 }
90 95
91 } // namespace internal
92 } // namespace mojo 96 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/public/cpp/bindings/lib/message_header_validator.h ('k') | mojo/public/cpp/bindings/lib/message_internal.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698