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

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

Issue 307353009: Mojo cpp bindings: report the reason of validation failure. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 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
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 #include "mojo/public/cpp/bindings/lib/bindings_serialization.h" 5 #include "mojo/public/cpp/bindings/lib/bindings_serialization.h"
6 6
7 #include <assert.h> 7 #include <assert.h>
8 8
9 #include "mojo/public/cpp/bindings/lib/bindings_internal.h" 9 #include "mojo/public/cpp/bindings/lib/bindings_internal.h"
10 #include "mojo/public/cpp/bindings/lib/bounds_checker.h" 10 #include "mojo/public/cpp/bindings/lib/bounds_checker.h"
11 #include "mojo/public/cpp/bindings/lib/validation_errors.h"
11 12
12 namespace mojo { 13 namespace mojo {
13 namespace internal { 14 namespace internal {
14 15
15 namespace { 16 namespace {
16 17
17 const size_t kAlignment = 8; 18 const size_t kAlignment = 8;
18 19
19 template<typename T> 20 template<typename T>
20 T AlignImpl(T t) { 21 T AlignImpl(T t) {
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 } 77 }
77 assert(handle->value() < handles->size()); 78 assert(handle->value() < handles->size());
78 // Just leave holes in the vector so we don't screw up other indices. 79 // Just leave holes in the vector so we don't screw up other indices.
79 *handle = FetchAndReset(&handles->at(handle->value())); 80 *handle = FetchAndReset(&handles->at(handle->value()));
80 } 81 }
81 82
82 bool ValidateStructHeader(const void* data, 83 bool ValidateStructHeader(const void* data,
83 uint32_t min_num_bytes, 84 uint32_t min_num_bytes,
84 uint32_t min_num_fields, 85 uint32_t min_num_fields,
85 BoundsChecker* bounds_checker) { 86 BoundsChecker* bounds_checker) {
86 if (!IsAligned(data)) 87 if (!IsAligned(data)) {
88 ReportValidationError(VALIDATION_ERROR_MISALIGNED_OBJECT);
87 return false; 89 return false;
88 if (!bounds_checker->IsValidRange(data, sizeof(StructHeader))) 90 }
91 if (!bounds_checker->IsValidRange(data, sizeof(StructHeader))) {
92 ReportValidationError(VALIDATION_ERROR_ILLEGAL_MEMORY_RANGE);
89 return false; 93 return false;
94 }
90 95
91 const StructHeader* header = static_cast<const StructHeader*>(data); 96 const StructHeader* header = static_cast<const StructHeader*>(data);
92 97
93 // TODO(yzshen): Currently our binding code cannot handle structs of smaller 98 // TODO(yzshen): Currently our binding code cannot handle structs of smaller
94 // size or with fewer fields than the version that it sees. That needs to be 99 // size or with fewer fields than the version that it sees. That needs to be
95 // changed in order to provide backward compatibility. 100 // changed in order to provide backward compatibility.
96 if (header->num_bytes < min_num_bytes || header->num_fields < min_num_fields) 101 if (header->num_bytes < min_num_bytes ||
102 header->num_fields < min_num_fields) {
103 ReportValidationError(VALIDATION_ERROR_UNEXPECTED_STRUCT_HEADER);
97 return false; 104 return false;
105 }
98 106
99 if (!bounds_checker->ClaimMemory(data, header->num_bytes)) 107 if (!bounds_checker->ClaimMemory(data, header->num_bytes)) {
108 ReportValidationError(VALIDATION_ERROR_ILLEGAL_MEMORY_RANGE);
100 return false; 109 return false;
110 }
101 111
102 return true; 112 return true;
103 } 113 }
104 114
105 } // namespace internal 115 } // namespace internal
106 } // namespace mojo 116 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/public/cpp/bindings/lib/array_internal.cc ('k') | mojo/public/cpp/bindings/lib/message_header_validator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698