| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 "base/pickle.h" | 5 #include "base/pickle.h" |
| 6 | 6 |
| 7 #include <stdlib.h> | 7 #include <stdlib.h> |
| 8 | 8 |
| 9 #include <limits> | 9 #include <limits> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 256 return false; | 256 return false; |
| 257 | 257 |
| 258 return ReadBytes(iter, data, *length); | 258 return ReadBytes(iter, data, *length); |
| 259 } | 259 } |
| 260 | 260 |
| 261 char* Pickle::BeginWrite(size_t length) { | 261 char* Pickle::BeginWrite(size_t length) { |
| 262 // write at a uint32-aligned offset from the beginning of the header | 262 // write at a uint32-aligned offset from the beginning of the header |
| 263 size_t offset = AlignInt(header_->payload_size, sizeof(uint32)); | 263 size_t offset = AlignInt(header_->payload_size, sizeof(uint32)); |
| 264 | 264 |
| 265 size_t new_size = offset + length; | 265 size_t new_size = offset + length; |
| 266 if (header_size_ + new_size > capacity_ && !Resize(header_size_ + new_size)) | 266 size_t needed_size = header_size_ + new_size; |
| 267 if (needed_size > capacity_ && !Resize(std::max(capacity_ * 2, needed_size))) |
| 267 return NULL; | 268 return NULL; |
| 268 | 269 |
| 269 #ifdef ARCH_CPU_64_BITS | 270 #ifdef ARCH_CPU_64_BITS |
| 270 DCHECK_LE(length, std::numeric_limits<uint32>::max()); | 271 DCHECK_LE(length, std::numeric_limits<uint32>::max()); |
| 271 #endif | 272 #endif |
| 272 | 273 |
| 273 header_->payload_size = static_cast<uint32>(new_size); | 274 header_->payload_size = static_cast<uint32>(new_size); |
| 274 return payload() + offset; | 275 return payload() + offset; |
| 275 } | 276 } |
| 276 | 277 |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 378 DCHECK(header_size <= static_cast<size_t>(kPayloadUnit)); | 379 DCHECK(header_size <= static_cast<size_t>(kPayloadUnit)); |
| 379 | 380 |
| 380 const Header* hdr = reinterpret_cast<const Header*>(start); | 381 const Header* hdr = reinterpret_cast<const Header*>(start); |
| 381 const char* payload_base = start + header_size; | 382 const char* payload_base = start + header_size; |
| 382 const char* payload_end = payload_base + hdr->payload_size; | 383 const char* payload_end = payload_base + hdr->payload_size; |
| 383 if (payload_end < payload_base) | 384 if (payload_end < payload_base) |
| 384 return NULL; | 385 return NULL; |
| 385 | 386 |
| 386 return (payload_end > end) ? NULL : payload_end; | 387 return (payload_end > end) ? NULL : payload_end; |
| 387 } | 388 } |
| OLD | NEW |