Chromium Code Reviews| Index: webrtc/base/copyonwritebuffer.h |
| diff --git a/webrtc/base/copyonwritebuffer.h b/webrtc/base/copyonwritebuffer.h |
| index 17f2710f3ecbd404646268d4af9a003d7c2e5465..895f449f77a3349afa1cba6042fb3914ab0c4ae2 100644 |
| --- a/webrtc/base/copyonwritebuffer.h |
| +++ b/webrtc/base/copyonwritebuffer.h |
| @@ -42,7 +42,9 @@ class CopyOnWriteBuffer { |
| template <typename T, typename internal::ByteType<T>::t = 0> |
| CopyOnWriteBuffer(const T* data, size_t size, size_t capacity) |
| : CopyOnWriteBuffer(size, capacity) { |
| - std::memcpy(buffer_->data(), data, size); |
| + if (size > 0) { |
| + std::memcpy(buffer_->data(), data, size); |
| + } |
|
kwiberg-webrtc
2016/03/14 11:53:49
The reason for having the conditional is clearer i
joachim
2016/03/17 20:27:21
Done.
|
| } |
| // Construct a buffer from the contents of an array. |
| @@ -128,9 +130,9 @@ class CopyOnWriteBuffer { |
| template <typename T, typename internal::ByteType<T>::t = 0> |
| void SetData(const T* data, size_t size) { |
| RTC_DCHECK(IsConsistent()); |
| - if (!buffer_ || !buffer_->HasOneRef()) { |
| - buffer_ = new RefCountedObject<Buffer>(data, size, size); |
| - } else { |
| + if (size && (!buffer_ || !buffer_->HasOneRef())) { |
| + buffer_ = new RefCountedObject<Buffer>(data, size); |
| + } else if (buffer_) { |
| buffer_->SetData(data, size); |
| } |
| RTC_DCHECK(IsConsistent()); |
|
kwiberg-webrtc
2016/03/14 11:53:49
Hmm. This is still wrong: if size == 0 and !buffer
joachim
2016/03/17 20:27:21
Thanks. Changed and added a test.
|