Index: device/u2f/u2f_hid_device.cc |
diff --git a/device/u2f/u2f_hid_device.cc b/device/u2f/u2f_hid_device.cc |
index 7bebafb1a458dfa4eeb6eba6235e9b95d408cfdc..c313b96e4c165aab270e68e616c552fa4401d62c 100644 |
--- a/device/u2f/u2f_hid_device.cc |
+++ b/device/u2f/u2f_hid_device.cc |
@@ -197,15 +197,14 @@ void U2fHidDevice::OnRead(U2fHidMessageCallback callback, |
bool success, |
scoped_refptr<net::IOBuffer> buf, |
size_t size) { |
- if (!success) { |
+ if (!success || !buf) { |
std::move(callback).Run(success, nullptr); |
return; |
} |
- scoped_refptr<net::IOBufferWithSize> buffer(new net::IOBufferWithSize(size)); |
- memcpy(buffer->data(), buf->data(), size); |
+ std::vector<uint8_t> read_buffer(buf->data(), buf->data() + size); |
std::unique_ptr<U2fMessage> read_message = |
- U2fMessage::CreateFromSerializedData(buffer); |
+ U2fMessage::CreateFromSerializedData(read_buffer); |
if (!read_message) { |
std::move(callback).Run(false, nullptr); |
@@ -236,14 +235,13 @@ void U2fHidDevice::OnReadContinuation(std::unique_ptr<U2fMessage> message, |
bool success, |
scoped_refptr<net::IOBuffer> buf, |
size_t size) { |
- if (!success) { |
+ if (!success || !buf) { |
std::move(callback).Run(success, nullptr); |
return; |
} |
- scoped_refptr<net::IOBufferWithSize> buffer(new net::IOBufferWithSize(size)); |
- memcpy(buffer->data(), buf->data(), size); |
- message->AddContinuationPacket(buffer); |
+ std::vector<uint8_t> read_buffer(buf->data(), buf->data() + size); |
+ message->AddContinuationPacket(read_buffer); |
if (message->MessageComplete()) { |
std::move(callback).Run(success, std::move(message)); |
return; |