| Index: mojo/public/cpp/bindings/lib/bindings_serialization.cc
|
| diff --git a/mojo/public/cpp/bindings/lib/bindings_serialization.cc b/mojo/public/cpp/bindings/lib/bindings_serialization.cc
|
| index c1114c0edba51df01430f408915b7141ddca37e0..d341b21446cd5154caf7a3813988c5091540be99 100644
|
| --- a/mojo/public/cpp/bindings/lib/bindings_serialization.cc
|
| +++ b/mojo/public/cpp/bindings/lib/bindings_serialization.cc
|
| @@ -8,6 +8,7 @@
|
|
|
| #include "mojo/public/cpp/bindings/lib/bindings_internal.h"
|
| #include "mojo/public/cpp/bindings/lib/bounds_checker.h"
|
| +#include "mojo/public/cpp/bindings/lib/validation_errors.h"
|
|
|
| namespace mojo {
|
| namespace internal {
|
| @@ -83,21 +84,30 @@ bool ValidateStructHeader(const void* data,
|
| uint32_t min_num_bytes,
|
| uint32_t min_num_fields,
|
| BoundsChecker* bounds_checker) {
|
| - if (!IsAligned(data))
|
| + if (!IsAligned(data)) {
|
| + ReportValidationError(VALIDATION_ERROR_MISALIGNED_OBJECT);
|
| return false;
|
| - if (!bounds_checker->IsValidRange(data, sizeof(StructHeader)))
|
| + }
|
| + if (!bounds_checker->IsValidRange(data, sizeof(StructHeader))) {
|
| + ReportValidationError(VALIDATION_ERROR_ILLEGAL_MEMORY_RANGE);
|
| return false;
|
| + }
|
|
|
| const StructHeader* header = static_cast<const StructHeader*>(data);
|
|
|
| // TODO(yzshen): Currently our binding code cannot handle structs of smaller
|
| // size or with fewer fields than the version that it sees. That needs to be
|
| // changed in order to provide backward compatibility.
|
| - if (header->num_bytes < min_num_bytes || header->num_fields < min_num_fields)
|
| + if (header->num_bytes < min_num_bytes ||
|
| + header->num_fields < min_num_fields) {
|
| + ReportValidationError(VALIDATION_ERROR_UNEXPECTED_STRUCT_HEADER);
|
| return false;
|
| + }
|
|
|
| - if (!bounds_checker->ClaimMemory(data, header->num_bytes))
|
| + if (!bounds_checker->ClaimMemory(data, header->num_bytes)) {
|
| + ReportValidationError(VALIDATION_ERROR_ILLEGAL_MEMORY_RANGE);
|
| return false;
|
| + }
|
|
|
| return true;
|
| }
|
|
|