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.
|