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 <algorithm> // for max() | 9 #include <algorithm> // for max() |
10 #include <limits> | 10 #include <limits> |
(...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
399 return true; | 399 return true; |
400 } | 400 } |
401 | 401 |
402 // static | 402 // static |
403 const char* Pickle::FindNext(size_t header_size, | 403 const char* Pickle::FindNext(size_t header_size, |
404 const char* start, | 404 const char* start, |
405 const char* end) { | 405 const char* end) { |
406 DCHECK(header_size == AlignInt(header_size, sizeof(uint32))); | 406 DCHECK(header_size == AlignInt(header_size, sizeof(uint32))); |
407 DCHECK(header_size <= static_cast<size_t>(kPayloadUnit)); | 407 DCHECK(header_size <= static_cast<size_t>(kPayloadUnit)); |
408 | 408 |
| 409 if (static_cast<size_t>(end - start) < sizeof(Header)) |
| 410 return NULL; |
| 411 |
409 const Header* hdr = reinterpret_cast<const Header*>(start); | 412 const Header* hdr = reinterpret_cast<const Header*>(start); |
410 const char* payload_base = start + header_size; | 413 const char* payload_base = start + header_size; |
411 const char* payload_end = payload_base + hdr->payload_size; | 414 const char* payload_end = payload_base + hdr->payload_size; |
412 if (payload_end < payload_base) | 415 if (payload_end < payload_base) |
413 return NULL; | 416 return NULL; |
414 | 417 |
415 return (payload_end > end) ? NULL : payload_end; | 418 return (payload_end > end) ? NULL : payload_end; |
416 } | 419 } |
OLD | NEW |