// Copyright 2014 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. #include "mojo/public/cpp/bindings/lib/validation_context.h" #include "base/logging.h" namespace mojo { namespace internal { ValidationContext::ValidationContext(const void* data, size_t data_num_bytes, size_t num_handles, size_t num_associated_endpoint_handles, Message* message, const base::StringPiece& description, int stack_depth) : message_(message), description_(description), data_begin_(reinterpret_cast(data)), data_end_(data_begin_ + data_num_bytes), handle_begin_(0), handle_end_(static_cast(num_handles)), associated_endpoint_handle_begin_(0), associated_endpoint_handle_end_( static_cast(num_associated_endpoint_handles)), stack_depth_(stack_depth) { // Check whether the calculation of |data_end_| or static_cast from size_t to // uint32_t causes overflow. // They shouldn't happen but they do, set the corresponding range to empty. if (data_end_ < data_begin_) { NOTREACHED(); data_end_ = data_begin_; } if (handle_end_ < num_handles) { NOTREACHED(); handle_end_ = 0; } if (associated_endpoint_handle_end_ < num_associated_endpoint_handles) { NOTREACHED(); associated_endpoint_handle_end_ = 0; } } ValidationContext::~ValidationContext() { } } // namespace internal } // namespace mojo