| Index: net/server/http_server.cc
|
| diff --git a/net/server/http_server.cc b/net/server/http_server.cc
|
| index c362e1b080f40b749d973fa2bbf34e0624af4a87..acafc6b2b30ba7a3332c7683bb48216f7914a6a9 100644
|
| --- a/net/server/http_server.cc
|
| +++ b/net/server/http_server.cc
|
| @@ -232,6 +232,13 @@ int HttpServer::HandleReadResult(HttpConnection* connection, int rv) {
|
| size_t pos = 0;
|
| if (!ParseHeaders(read_buf->StartOfBuffer(), read_buf->GetSize(),
|
| &request, &pos)) {
|
| + // An error has occured. Close the connection.
|
| + Close(connection->id());
|
| + return ERR_CONNECTION_CLOSED;
|
| + } else if (!pos) {
|
| + // If pos is 0, all the data in read_buf has been consumed, but the
|
| + // headers have not been fully parsed yet. Continue parsing when more data
|
| + // rolls in.
|
| break;
|
| }
|
|
|
| @@ -405,8 +412,10 @@ bool HttpServer::ParseHeaders(const char* data,
|
| buffer.clear();
|
| break;
|
| case ST_PROTO:
|
| - // TODO(mbelshe): Deal better with parsing protocol.
|
| - DCHECK(buffer == "HTTP/1.1");
|
| + if (buffer != "HTTP/1.1") {
|
| + LOG(ERROR) << "Cannot handle request with protocol: " << buffer;
|
| + next_state = ST_ERR;
|
| + }
|
| buffer.clear();
|
| break;
|
| case ST_NAME:
|
| @@ -448,8 +457,10 @@ bool HttpServer::ParseHeaders(const char* data,
|
| }
|
| }
|
| }
|
| - // No more characters, but we haven't finished parsing yet.
|
| - return false;
|
| + // No more characters, but we haven't finished parsing yet. Signal this to
|
| + // the caller by setting |pos| to zero.
|
| + pos = 0;
|
| + return true;
|
| }
|
|
|
| HttpConnection* HttpServer::FindConnection(int connection_id) {
|
|
|