Index: net/websockets/websocket_frame_parser.cc |
diff --git a/net/websockets/websocket_frame_parser.cc b/net/websockets/websocket_frame_parser.cc |
index edbd0e6fc82bf3baaa88662372474e1929cb107c..8053a138e84e669537d56d02c6df2281208d7009 100644 |
--- a/net/websockets/websocket_frame_parser.cc |
+++ b/net/websockets/websocket_frame_parser.cc |
@@ -36,7 +36,8 @@ namespace net { |
WebSocketFrameParser::WebSocketFrameParser() |
: current_read_pos_(0), |
frame_offset_(0), |
- failed_(false) { |
+ failed_(false), |
+ error_code_(WS_OK) { |
std::fill(masking_key_, |
masking_key_ + WebSocketFrameHeader::kMaskingKeyLength, |
'\0'); |
@@ -121,8 +122,6 @@ void WebSocketFrameParser::DecodeFrameHeader() { |
bool masked = (second_byte & kMaskBit) != 0; |
uint64 payload_length = second_byte & kPayloadLengthMask; |
- bool valid_length_format = true; |
- bool message_too_big = false; |
if (payload_length == kPayloadLengthWithTwoByteExtendedLengthField) { |
if (end - current < 2) |
return; |
@@ -131,20 +130,19 @@ void WebSocketFrameParser::DecodeFrameHeader() { |
current += 2; |
payload_length = payload_length_16; |
if (payload_length <= kMaxPayloadLengthWithoutExtendedLengthField) |
- valid_length_format = false; |
+ error_code_ = WS_ERR_PROTOCOL_ERROR; |
} else if (payload_length == kPayloadLengthWithEightByteExtendedLengthField) { |
if (end - current < 8) |
return; |
ReadBigEndian(current, &payload_length); |
current += 8; |
if (payload_length <= kuint16max || |
- payload_length > static_cast<uint64>(kint64max)) { |
- valid_length_format = false; |
- } |
- if (payload_length > static_cast<uint64>(kint32max)) |
- message_too_big = true; |
+ payload_length > static_cast<uint64>(kint64max)) |
mmenke
2012/08/01 14:44:59
nit: Google style (Or maybe Chrome style, can't r
|
+ error_code_ = WS_ERR_PROTOCOL_ERROR; |
+ else if (payload_length > static_cast<uint64>(kint32max)) |
+ error_code_ = WS_ERR_MESSAGE_TOO_BIG; |
} |
- if (!valid_length_format || message_too_big) { |
+ if (error_code_ != WS_OK) { |
failed_ = true; |
buffer_.clear(); |
current_read_pos_ = 0; |