From f35a1bec072d534e75439e79544353a973161647 Mon Sep 17 00:00:00 2001 From: Julien Duponchelle Date: Tue, 9 Jun 2015 15:34:11 +0200 Subject: [PATCH] Return a 404 if server received a non HTTP content Fix #404 --- aiohttp/server.py | 2 ++ tests/test_http_server.py | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/aiohttp/server.py b/aiohttp/server.py index 40c1fade00d..034002c71d7 100644 --- a/aiohttp/server.py +++ b/aiohttp/server.py @@ -280,6 +280,8 @@ def start(self): if self.transport is not None: yield from self.handle_error(exc.code, message, None, exc, exc.headers) + except errors.LineLimitExceededParserError as exc: + yield from self.handle_error(400, message, None, exc) except Exception as exc: yield from self.handle_error(500, message, None, exc) finally: diff --git a/tests/test_http_server.py b/tests/test_http_server.py index 6652434eadb..739f1aeec5c 100644 --- a/tests/test_http_server.py +++ b/tests/test_http_server.py @@ -221,6 +221,17 @@ def test_bad_method(self): self.assertTrue(transport.write.mock_calls[0][1][0].startswith( b'HTTP/1.1 400 Bad Request\r\n')) + def test_line_too_long(self): + transport = unittest.mock.Mock() + srv = server.ServerHttpProtocol(loop=self.loop) + srv.connection_made(transport) + + srv.reader.feed_data(b''.join([b'a' for _ in range(10000)])) + + self.loop.run_until_complete(srv._request_handler) + self.assertTrue(transport.write.mock_calls[0][1][0].startswith( + b'HTTP/1.1 400 Bad Request\r\n')) + def test_handle_error(self): transport = unittest.mock.Mock() srv = server.ServerHttpProtocol(loop=self.loop)