OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
300 Resize(other.header_->payload_size); | 300 Resize(other.header_->payload_size); |
301 memcpy(header_, other.header_, header_size_ + other.header_->payload_size); | 301 memcpy(header_, other.header_, header_size_ + other.header_->payload_size); |
302 } | 302 } |
303 | 303 |
304 Pickle::~Pickle() { | 304 Pickle::~Pickle() { |
305 if (capacity_after_header_ != kCapacityReadOnly) | 305 if (capacity_after_header_ != kCapacityReadOnly) |
306 free(header_); | 306 free(header_); |
307 } | 307 } |
308 | 308 |
309 Pickle& Pickle::operator=(const Pickle& other) { | 309 Pickle& Pickle::operator=(const Pickle& other) { |
310 if (this == &other) { | |
311 NOTREACHED(); | |
dcheng
2017/04/05 20:22:18
The post condition for CopyAssignment in N4618 [1]
dyaroshev
2017/04/05 20:42:47
This NOTREACHED mislead me - I read it as move ass
dcheng
2017/04/05 20:45:49
Dropping the NOTREACHED() seems fine, as long as k
dyaroshev
2017/04/05 20:54:17
Done.
| |
312 return *this; | |
313 } | |
314 if (capacity_after_header_ == kCapacityReadOnly) { | 310 if (capacity_after_header_ == kCapacityReadOnly) { |
315 header_ = NULL; | 311 header_ = NULL; |
316 capacity_after_header_ = 0; | 312 capacity_after_header_ = 0; |
317 } | 313 } |
318 if (header_size_ != other.header_size_) { | 314 if (header_size_ != other.header_size_) { |
319 free(header_); | 315 free(header_); |
320 header_ = NULL; | 316 header_ = NULL; |
321 header_size_ = other.header_size_; | 317 header_size_ = other.header_size_; |
322 } | 318 } |
323 Resize(other.header_->payload_size); | 319 Resize(other.header_->payload_size); |
324 memcpy(header_, other.header_, | 320 memcpy(header_, other.header_, |
danakj
2017/04/05 19:17:40
memcpy of overlapping memory is not allowed
dyaroshev
2017/04/05 20:42:47
I reverted this file.
| |
325 other.header_size_ + other.header_->payload_size); | 321 other.header_size_ + other.header_->payload_size); |
326 write_offset_ = other.write_offset_; | 322 write_offset_ = other.write_offset_; |
327 return *this; | 323 return *this; |
328 } | 324 } |
329 | 325 |
330 bool Pickle::WriteString(const StringPiece& value) { | 326 bool Pickle::WriteString(const StringPiece& value) { |
331 if (!WriteInt(static_cast<int>(value.size()))) | 327 if (!WriteInt(static_cast<int>(value.size()))) |
332 return false; | 328 return false; |
333 | 329 |
334 return WriteBytes(value.data(), static_cast<int>(value.size())); | 330 return WriteBytes(value.data(), static_cast<int>(value.size())); |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
473 | 469 |
474 inline void Pickle::WriteBytesCommon(const void* data, size_t length) { | 470 inline void Pickle::WriteBytesCommon(const void* data, size_t length) { |
475 DCHECK_NE(kCapacityReadOnly, capacity_after_header_) | 471 DCHECK_NE(kCapacityReadOnly, capacity_after_header_) |
476 << "oops: pickle is readonly"; | 472 << "oops: pickle is readonly"; |
477 MSAN_CHECK_MEM_IS_INITIALIZED(data, length); | 473 MSAN_CHECK_MEM_IS_INITIALIZED(data, length); |
478 void* write = ClaimUninitializedBytesInternal(length); | 474 void* write = ClaimUninitializedBytesInternal(length); |
479 memcpy(write, data, length); | 475 memcpy(write, data, length); |
480 } | 476 } |
481 | 477 |
482 } // namespace base | 478 } // namespace base |
OLD | NEW |