diff --git a/Lib/http/server.py b/Lib/http/server.py index 226ca3b16ccbeb..bee8605dfef95e 100644 --- a/Lib/http/server.py +++ b/Lib/http/server.py @@ -1291,7 +1291,7 @@ def run_cgi(self): cursize = 0 data = self.rfile.read(min(nbytes, _MIN_READ_BUF_SIZE)) while (len(data) < nbytes and len(data) != cursize and - select.select([self.rfile._sock], [], [], 0)[0]): + select.select([self.rfile._sock], [], [], self.timeout)[0]): cursize = len(data) # This is a geometric increase in read size (never more # than doubling our the current length of data per loop diff --git a/Lib/test/test_httpservers.py b/Lib/test/test_httpservers.py index 0f003064f3109c..7b58c5ef55b337 100644 --- a/Lib/test/test_httpservers.py +++ b/Lib/test/test_httpservers.py @@ -1132,11 +1132,12 @@ def test_large_content_length(self): self.assertEqual(res.read(), b'%d %d' % (size, size) + self.linesep) def test_large_content_length_truncated(self): - for w in range(18, 65): - size = 1 << w - headers = {'Content-Length' : str(size)} - res = self.request('/cgi-bin/file1.py', 'POST', b'x', headers) - self.assertEqual(res.read(), b'Hello World' + self.linesep) + with support.swap_attr(self.request_handler, 'timeout', 0.001): + for w in range(18, 65): + size = 1 << w + headers = {'Content-Length' : str(size)} + res = self.request('/cgi-bin/file1.py', 'POST', b'x', headers) + self.assertEqual(res.read(), b'Hello World' + self.linesep) def test_invaliduri(self): res = self.request('/cgi-bin/invalid')