Index: third_party/mojo/src/mojo/public/cpp/bindings/lib/validation_util.h |
diff --git a/third_party/mojo/src/mojo/public/cpp/bindings/lib/validation_util.h b/third_party/mojo/src/mojo/public/cpp/bindings/lib/validation_util.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1b80a5b19fa8987470b25e64596df630f28f1200 |
--- /dev/null |
+++ b/third_party/mojo/src/mojo/public/cpp/bindings/lib/validation_util.h |
@@ -0,0 +1,48 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef MOJO_PUBLIC_CPP_BINDINGS_LIB_VALIDATION_UTIL_H_ |
+#define MOJO_PUBLIC_CPP_BINDINGS_LIB_VALIDATION_UTIL_H_ |
+ |
+#include <stdint.h> |
+ |
+#include "mojo/public/cpp/bindings/lib/bounds_checker.h" |
+#include "mojo/public/cpp/bindings/message.h" |
+ |
+namespace mojo { |
+namespace internal { |
+ |
+// Checks whether decoding the pointer will overflow and produce a pointer |
+// smaller than |offset|. |
+bool ValidateEncodedPointer(const uint64_t* offset); |
+ |
+// Validates that |data| contains a valid struct header, in terms of alignment |
+// and size (i.e., the |num_bytes| field of the header is sufficient for storing |
+// the header itself). Besides, it checks that the memory range |
+// [data, data + num_bytes) is not marked as occupied by other objects in |
+// |bounds_checker|. On success, the memory range is marked as occupied. |
+// Note: Does not verify |version| or that |num_bytes| is correct for the |
+// claimed version. |
+bool ValidateStructHeaderAndClaimMemory(const void* data, |
+ BoundsChecker* bounds_checker); |
+ |
+// Validates that the message is a request which doesn't expect a response. |
+bool ValidateMessageIsRequestWithoutResponse(const Message* message); |
+// Validates that the message is a request expecting a response. |
+bool ValidateMessageIsRequestExpectingResponse(const Message* message); |
+// Validates that the message is a response. |
+bool ValidateMessageIsResponse(const Message* message); |
+ |
+// Validates that the message payload is a valid struct of type ParamsType. |
+template <typename ParamsType> |
+bool ValidateMessagePayload(const Message* message) { |
+ BoundsChecker bounds_checker(message->payload(), message->payload_num_bytes(), |
+ message->handles()->size()); |
+ return ParamsType::Validate(message->payload(), &bounds_checker); |
+} |
+ |
+} // namespace internal |
+} // namespace mojo |
+ |
+#endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_VALIDATION_UTIL_H_ |