Index: Misc/ACKS =================================================================== --- Misc/ACKS (revision 87265) +++ Misc/ACKS (working copy) @@ -475,6 +475,7 @@ Ivan Krstić Andrew Kuchling Vladimir Kushnir +Ross Lagerwall Cameron Laird Jean-Baptiste "Jiba" Lamy Torsten Landschoff Index: Lib/http/server.py =================================================================== --- Lib/http/server.py (revision 87265) +++ Lib/http/server.py (working copy) @@ -358,7 +358,13 @@ """ try: - self.raw_requestline = self.rfile.readline() + self.raw_requestline = self.rfile.readline(65537) + if len(self.raw_requestline) > 65536: + self.requestline = '' + self.request_version = '' + self.command = '' + self.send_error(414) + return if not self.raw_requestline: self.close_connection = 1 return Index: Lib/test/test_httpservers.py =================================================================== --- Lib/test/test_httpservers.py (revision 87265) +++ Lib/test/test_httpservers.py (working copy) @@ -588,7 +588,27 @@ path = self.handler.translate_path('//filename?foo=bar') self.assertEqual(path, self.translated) + def test_request_length(self): + try: + import multiprocessing + import http.client + except ImportError: + self.skipTest("Need multiprocessing") + else: + h = server.HTTPServer(('', 8888), http.server.SimpleHTTPRequestHandler) + def runner(): + h.serve_forever() + + p = multiprocessing.Process(target=runner) + p.start() + + c = http.client.HTTPConnection("localhost", 8888) + c.request("GET", "x" * 65537) + code = c.getresponse().getcode() + p.terminate() + self.assertEqual(code, 414) + def test_main(verbose=None): cwd = os.getcwd() try: