OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 #ifndef MOJO_PUBLIC_CPP_BINDINGS_LIB_VALIDATION_UTIL_H_ | 5 #ifndef MOJO_PUBLIC_CPP_BINDINGS_LIB_VALIDATION_UTIL_H_ |
6 #define MOJO_PUBLIC_CPP_BINDINGS_LIB_VALIDATION_UTIL_H_ | 6 #define MOJO_PUBLIC_CPP_BINDINGS_LIB_VALIDATION_UTIL_H_ |
7 | 7 |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include "mojo/public/cpp/bindings/lib/bindings_internal.h" | 10 #include "mojo/public/cpp/bindings/lib/bindings_internal.h" |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
125 ValidationContext* validation_context); | 125 ValidationContext* validation_context); |
126 bool ValidateHandleOrInterfaceNonNullable( | 126 bool ValidateHandleOrInterfaceNonNullable( |
127 const Handle_Data& input, | 127 const Handle_Data& input, |
128 const char* error_message, | 128 const char* error_message, |
129 ValidationContext* validation_context); | 129 ValidationContext* validation_context); |
130 | 130 |
131 template <typename T> | 131 template <typename T> |
132 bool ValidateContainer(const Pointer<T>& input, | 132 bool ValidateContainer(const Pointer<T>& input, |
133 ValidationContext* validation_context, | 133 ValidationContext* validation_context, |
134 const ContainerValidateParams* validate_params) { | 134 const ContainerValidateParams* validate_params) { |
| 135 ValidationContext::ScopedDepthTracker depth_tracker(validation_context); |
| 136 if (validation_context->ExceedsMaxDepth()) { |
| 137 ReportValidationError(validation_context, |
| 138 VALIDATION_ERROR_MAX_RECURSION_DEPTH); |
| 139 return false; |
| 140 } |
135 return ValidatePointer(input, validation_context) && | 141 return ValidatePointer(input, validation_context) && |
136 T::Validate(input.Get(), validation_context, validate_params); | 142 T::Validate(input.Get(), validation_context, validate_params); |
137 } | 143 } |
138 | 144 |
139 template <typename T> | 145 template <typename T> |
140 bool ValidateStruct(const Pointer<T>& input, | 146 bool ValidateStruct(const Pointer<T>& input, |
141 ValidationContext* validation_context) { | 147 ValidationContext* validation_context) { |
| 148 ValidationContext::ScopedDepthTracker depth_tracker(validation_context); |
| 149 if (validation_context->ExceedsMaxDepth()) { |
| 150 ReportValidationError(validation_context, |
| 151 VALIDATION_ERROR_MAX_RECURSION_DEPTH); |
| 152 return false; |
| 153 } |
142 return ValidatePointer(input, validation_context) && | 154 return ValidatePointer(input, validation_context) && |
143 T::Validate(input.Get(), validation_context); | 155 T::Validate(input.Get(), validation_context); |
144 } | 156 } |
145 | 157 |
146 template <typename T> | 158 template <typename T> |
147 bool ValidateInlinedUnion(const T& input, | 159 bool ValidateInlinedUnion(const T& input, |
148 ValidationContext* validation_context) { | 160 ValidationContext* validation_context) { |
| 161 ValidationContext::ScopedDepthTracker depth_tracker(validation_context); |
| 162 if (validation_context->ExceedsMaxDepth()) { |
| 163 ReportValidationError(validation_context, |
| 164 VALIDATION_ERROR_MAX_RECURSION_DEPTH); |
| 165 return false; |
| 166 } |
149 return T::Validate(&input, validation_context, true); | 167 return T::Validate(&input, validation_context, true); |
150 } | 168 } |
151 | 169 |
152 template <typename T> | 170 template <typename T> |
153 bool ValidateNonInlinedUnion(const Pointer<T>& input, | 171 bool ValidateNonInlinedUnion(const Pointer<T>& input, |
154 ValidationContext* validation_context) { | 172 ValidationContext* validation_context) { |
| 173 ValidationContext::ScopedDepthTracker depth_tracker(validation_context); |
| 174 if (validation_context->ExceedsMaxDepth()) { |
| 175 ReportValidationError(validation_context, |
| 176 VALIDATION_ERROR_MAX_RECURSION_DEPTH); |
| 177 return false; |
| 178 } |
155 return ValidatePointer(input, validation_context) && | 179 return ValidatePointer(input, validation_context) && |
156 T::Validate(input.Get(), validation_context, false); | 180 T::Validate(input.Get(), validation_context, false); |
157 } | 181 } |
158 | 182 |
159 bool ValidateHandleOrInterface(const AssociatedInterface_Data& input, | 183 bool ValidateHandleOrInterface(const AssociatedInterface_Data& input, |
160 ValidationContext* validation_context); | 184 ValidationContext* validation_context); |
161 bool ValidateHandleOrInterface(const AssociatedInterfaceRequest_Data& input, | 185 bool ValidateHandleOrInterface(const AssociatedInterfaceRequest_Data& input, |
162 ValidationContext* validation_context); | 186 ValidationContext* validation_context); |
163 bool ValidateHandleOrInterface(const Interface_Data& input, | 187 bool ValidateHandleOrInterface(const Interface_Data& input, |
164 ValidationContext* validation_context); | 188 ValidationContext* validation_context); |
165 bool ValidateHandleOrInterface(const Handle_Data& input, | 189 bool ValidateHandleOrInterface(const Handle_Data& input, |
166 ValidationContext* validation_context); | 190 ValidationContext* validation_context); |
167 | 191 |
168 } // namespace internal | 192 } // namespace internal |
169 } // namespace mojo | 193 } // namespace mojo |
170 | 194 |
171 #endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_VALIDATION_UTIL_H_ | 195 #endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_VALIDATION_UTIL_H_ |
OLD | NEW |