| Index: blimp/net/stream_packet_reader.cc
|
| diff --git a/blimp/net/stream_packet_reader.cc b/blimp/net/stream_packet_reader.cc
|
| index da65ad99fa07beb8077005ef0b8b28a228ba5bfe..8e675b32c8b3bfe511d07c84bb7fdfd9d8e85c52 100644
|
| --- a/blimp/net/stream_packet_reader.cc
|
| +++ b/blimp/net/stream_packet_reader.cc
|
| @@ -47,7 +47,9 @@ void StreamPacketReader::ReadPacket(
|
| const scoped_refptr<net::GrowableIOBuffer>& buf,
|
| const net::CompletionCallback& callback) {
|
| DCHECK_EQ(ReadState::IDLE, read_state_);
|
| - DCHECK_GT(buf->capacity(), 0);
|
| + if (static_cast<size_t>(buf->capacity()) < kPacketHeaderSizeBytes) {
|
| + buf->SetCapacity(kPacketHeaderSizeBytes);
|
| + }
|
|
|
| header_buffer_->set_offset(0);
|
| payload_buffer_ = buf;
|
| @@ -114,11 +116,13 @@ int StreamPacketReader::DoReadHeader(int result) {
|
| // Finished reading the header. Parse the size and prepare for payload read.
|
| payload_size_ = base::NetToHost32(
|
| *reinterpret_cast<uint32_t*>(header_buffer_->StartOfBuffer()));
|
| - if (payload_size_ > static_cast<size_t>(payload_buffer_->capacity()) ||
|
| - payload_size_ == 0) {
|
| + if (payload_size_ == 0 || payload_size_ > kMaxPacketPayloadSizeBytes) {
|
| DLOG(ERROR) << "Illegal payload size: " << payload_size_;
|
| return net::ERR_INVALID_RESPONSE;
|
| }
|
| + if (static_cast<size_t>(payload_buffer_->capacity()) < payload_size_) {
|
| + payload_buffer_->SetCapacity(payload_size_);
|
| + }
|
| read_state_ = ReadState::PAYLOAD;
|
| return net::OK;
|
| }
|
|
|