Index: net/server/http_server.cc |
diff --git a/net/server/http_server.cc b/net/server/http_server.cc |
index c362e1b080f40b749d973fa2bbf34e0624af4a87..38ec2328d6a7369b7adbd5d381c6b4fe2c8226f9 100644 |
--- a/net/server/http_server.cc |
+++ b/net/server/http_server.cc |
@@ -232,6 +232,12 @@ 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, we read all the data in read_buf, but haven't yet finished |
mmenke
2016/09/15 17:40:12
nit: avoid "we" in comments, due to ambiguity ("W
slan
2016/09/16 22:35:30
Done.
|
+ // parsing the headers. Continue parsing when more data rolls in. |
break; |
} |
@@ -405,8 +411,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 +456,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) { |