From ee23d592bd50c05f513561aaee0c7c75e9de92f7 Mon Sep 17 00:00:00 2001 From: Petr Viktorin Date: Tue, 2 Dec 2025 10:05:15 +0100 Subject: [PATCH 1/2] gh-119452: Remove select, skip 'truncated' test This removes the select added in commit 29c657a1f231c0908796e0c9ff6967e15ab20d9b. As Greg put it in https://github.com/python/cpython/pull/119455/files#r2580052775: > why select at all here given we just want to block on reading another chunk? > if the socket closes or errors, that'd return anyways. This makes the function wait forever for the query body. Thus, the new test 'test_large_content_length_truncated' times out. This was the case before the fix, too. --- Lib/http/server.py | 3 +-- Lib/test/test_httpservers.py | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Lib/http/server.py b/Lib/http/server.py index 226ca3b16ccbeb..35c3c913eae485 100644 --- a/Lib/http/server.py +++ b/Lib/http/server.py @@ -1290,8 +1290,7 @@ def run_cgi(self): if self.command.lower() == "post" and nbytes > 0: 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]): + while len(data) < nbytes and len(data) != cursize: 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..9c501e36ac9bd5 100644 --- a/Lib/test/test_httpservers.py +++ b/Lib/test/test_httpservers.py @@ -1131,6 +1131,7 @@ def test_large_content_length(self): res = self.request('/cgi-bin/file7.py', 'POST', body, headers) self.assertEqual(res.read(), b'%d %d' % (size, size) + self.linesep) + @unittest.skipIf(True, "Waits forever for input") def test_large_content_length_truncated(self): for w in range(18, 65): size = 1 << w From 361799267a5702ce7cfd4f84154b52481e5650a5 Mon Sep 17 00:00:00 2001 From: Petr Viktorin Date: Wed, 3 Dec 2025 11:59:18 +0100 Subject: [PATCH 2/2] Remove test_large_content_length_truncated --- Lib/test/test_httpservers.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/Lib/test/test_httpservers.py b/Lib/test/test_httpservers.py index 9c501e36ac9bd5..90a2f4be537e04 100644 --- a/Lib/test/test_httpservers.py +++ b/Lib/test/test_httpservers.py @@ -1131,14 +1131,6 @@ def test_large_content_length(self): res = self.request('/cgi-bin/file7.py', 'POST', body, headers) self.assertEqual(res.read(), b'%d %d' % (size, size) + self.linesep) - @unittest.skipIf(True, "Waits forever for input") - 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) - def test_invaliduri(self): res = self.request('/cgi-bin/invalid') res.read()