| Index: net/server/web_socket.cc
|
| diff --git a/net/server/web_socket.cc b/net/server/web_socket.cc
|
| index 79ffcecb7ada589c1c3171c27caedea4226931d4..bd3d9e494ab73d0d970a93f7091e9756a0ba7dbe 100644
|
| --- a/net/server/web_socket.cc
|
| +++ b/net/server/web_socket.cc
|
| @@ -98,6 +98,17 @@ WebSocket::ParseResult WebSocket::Read(std::string* message) {
|
| if (closed_)
|
| return FRAME_CLOSE;
|
|
|
| + if (!encoder_) {
|
| + // RFC6455, section 4.1 says "Once the client's opening handshake has been
|
| + // sent, the client MUST wait for a response from the server before sending
|
| + // any further data". If |encoder_| is null here, ::Accept either has not
|
| + // been called at all, or has rejected a request rather than producing
|
| + // a server handshake. Either way, the client clearly couldn't have gotten
|
| + // a proper server handshake, so error out, especially since this method
|
| + // can't proceed without an |encoder_|.
|
| + return FRAME_ERROR;
|
| + }
|
| +
|
| HttpConnection::ReadIOBuffer* read_buf = connection_->read_buf();
|
| base::StringPiece frame(read_buf->StartOfBuffer(), read_buf->GetSize());
|
| int bytes_consumed = 0;
|
|
|