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

Side by Side Diff: mojo/public/cpp/bindings/lib/array_internal.h

Issue 494943004: Mojo C++ bindings: better log messages for some validation errors at the receiver side. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 4 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | mojo/public/cpp/bindings/lib/validation_errors.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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_ARRAY_INTERNAL_H_ 5 #ifndef MOJO_PUBLIC_CPP_BINDINGS_LIB_ARRAY_INTERNAL_H_
6 #define MOJO_PUBLIC_CPP_BINDINGS_LIB_ARRAY_INTERNAL_H_ 6 #define MOJO_PUBLIC_CPP_BINDINGS_LIB_ARRAY_INTERNAL_H_
7 7
8 #include <new> 8 #include <new>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 static bool ValidateElements(const ArrayHeader* header, 209 static bool ValidateElements(const ArrayHeader* header,
210 const ElementType* elements, 210 const ElementType* elements,
211 BoundsChecker* bounds_checker) { 211 BoundsChecker* bounds_checker) {
212 MOJO_COMPILE_ASSERT( 212 MOJO_COMPILE_ASSERT(
213 (IsSame<ElementValidateParams, NoValidateParams>::value), 213 (IsSame<ElementValidateParams, NoValidateParams>::value),
214 Handle_type_should_not_have_array_validate_params); 214 Handle_type_should_not_have_array_validate_params);
215 215
216 for (uint32_t i = 0; i < header->num_elements; ++i) { 216 for (uint32_t i = 0; i < header->num_elements; ++i) {
217 if (!element_is_nullable && 217 if (!element_is_nullable &&
218 elements[i].value() == kEncodedInvalidHandleValue) { 218 elements[i].value() == kEncodedInvalidHandleValue) {
219 ReportValidationError(VALIDATION_ERROR_UNEXPECTED_INVALID_HANDLE); 219 ReportValidationError(
220 VALIDATION_ERROR_UNEXPECTED_INVALID_HANDLE,
221 MakeMessageWithArrayIndex(
222 "invalid handle in array expecting valid handles",
223 header->num_elements, i).c_str());
220 return false; 224 return false;
221 } 225 }
222 if (!bounds_checker->ClaimHandle(elements[i])) { 226 if (!bounds_checker->ClaimHandle(elements[i])) {
223 ReportValidationError(VALIDATION_ERROR_ILLEGAL_HANDLE); 227 ReportValidationError(VALIDATION_ERROR_ILLEGAL_HANDLE);
224 return false; 228 return false;
225 } 229 }
226 } 230 }
227 return true; 231 return true;
228 } 232 }
229 }; 233 };
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 for (uint32_t i = 0; i < header->num_elements; ++i) 277 for (uint32_t i = 0; i < header->num_elements; ++i)
274 Decode(&elements[i], handles); 278 Decode(&elements[i], handles);
275 } 279 }
276 280
277 template <bool element_is_nullable, typename ElementValidateParams> 281 template <bool element_is_nullable, typename ElementValidateParams>
278 static bool ValidateElements(const ArrayHeader* header, 282 static bool ValidateElements(const ArrayHeader* header,
279 const ElementType* elements, 283 const ElementType* elements,
280 BoundsChecker* bounds_checker) { 284 BoundsChecker* bounds_checker) {
281 for (uint32_t i = 0; i < header->num_elements; ++i) { 285 for (uint32_t i = 0; i < header->num_elements; ++i) {
282 if (!element_is_nullable && !elements[i].offset) { 286 if (!element_is_nullable && !elements[i].offset) {
283 ReportValidationError(VALIDATION_ERROR_UNEXPECTED_NULL_POINTER); 287 ReportValidationError(
288 VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
289 MakeMessageWithArrayIndex(
290 "null in array expecting valid pointers",
291 header->num_elements, i).c_str());
284 return false; 292 return false;
285 } 293 }
286 if (!ValidateEncodedPointer(&elements[i].offset)) { 294 if (!ValidateEncodedPointer(&elements[i].offset)) {
287 ReportValidationError(VALIDATION_ERROR_ILLEGAL_POINTER); 295 ReportValidationError(VALIDATION_ERROR_ILLEGAL_POINTER);
288 return false; 296 return false;
289 } 297 }
290 if (!ValidateCaller<P, ElementValidateParams>::Run( 298 if (!ValidateCaller<P, ElementValidateParams>::Run(
291 DecodePointerRaw(&elements[i].offset), bounds_checker)) { 299 DecodePointerRaw(&elements[i].offset), bounds_checker)) {
292 return false; 300 return false;
293 } 301 }
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 return false; 357 return false;
350 } 358 }
351 const ArrayHeader* header = static_cast<const ArrayHeader*>(data); 359 const ArrayHeader* header = static_cast<const ArrayHeader*>(data);
352 if (header->num_elements > Traits::kMaxNumElements || 360 if (header->num_elements > Traits::kMaxNumElements ||
353 header->num_bytes < Traits::GetStorageSize(header->num_elements)) { 361 header->num_bytes < Traits::GetStorageSize(header->num_elements)) {
354 ReportValidationError(VALIDATION_ERROR_UNEXPECTED_ARRAY_HEADER); 362 ReportValidationError(VALIDATION_ERROR_UNEXPECTED_ARRAY_HEADER);
355 return false; 363 return false;
356 } 364 }
357 if (Params::expected_num_elements != 0 && 365 if (Params::expected_num_elements != 0 &&
358 header->num_elements != Params::expected_num_elements) { 366 header->num_elements != Params::expected_num_elements) {
359 ReportValidationError(VALIDATION_ERROR_UNEXPECTED_ARRAY_HEADER); 367 ReportValidationError(
368 VALIDATION_ERROR_UNEXPECTED_ARRAY_HEADER,
369 MakeMessageWithExpectedArraySize(
370 "fixed-size array has wrong number of elements",
371 header->num_elements, Params::expected_num_elements).c_str());
360 return false; 372 return false;
361 } 373 }
362 if (!bounds_checker->ClaimMemory(data, header->num_bytes)) { 374 if (!bounds_checker->ClaimMemory(data, header->num_bytes)) {
363 ReportValidationError(VALIDATION_ERROR_ILLEGAL_MEMORY_RANGE); 375 ReportValidationError(VALIDATION_ERROR_ILLEGAL_MEMORY_RANGE);
364 return false; 376 return false;
365 } 377 }
366 378
367 const Array_Data<T>* object = static_cast<const Array_Data<T>*>(data); 379 const Array_Data<T>* object = static_cast<const Array_Data<T>*>(data);
368 return Helper::template ValidateElements< 380 return Helper::template ValidateElements<
369 Params::element_is_nullable, typename Params::ElementValidateParams>( 381 Params::element_is_nullable, typename Params::ElementValidateParams>(
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
490 }; 502 };
491 503
492 template <> struct WrapperTraits<String, false> { 504 template <> struct WrapperTraits<String, false> {
493 typedef String_Data* DataType; 505 typedef String_Data* DataType;
494 }; 506 };
495 507
496 } // namespace internal 508 } // namespace internal
497 } // namespace mojo 509 } // namespace mojo
498 510
499 #endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_ARRAY_INTERNAL_H_ 511 #endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_ARRAY_INTERNAL_H_
OLDNEW
« no previous file with comments | « no previous file | mojo/public/cpp/bindings/lib/validation_errors.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698