Skip to content

Commit 769972c

Browse files
Simply use non-zero timeout.
1 parent f00ef9f commit 769972c

File tree

2 files changed

+11
-10
lines changed

2 files changed

+11
-10
lines changed

Lib/http/server.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1288,16 +1288,16 @@ def run_cgi(self):
12881288
env = env
12891289
)
12901290
if self.command.lower() == "post" and nbytes > 0:
1291-
cursize = min(nbytes, _MIN_READ_BUF_SIZE)
1292-
data = self.rfile.read(cursize)
1293-
while (len(data) == cursize < nbytes and
1294-
select.select([self.rfile._sock], [], [], 0)[0]):
1291+
cursize = 0
1292+
data = self.rfile.read(min(nbytes, _MIN_READ_BUF_SIZE))
1293+
while (len(data) < nbytes and len(data) != cursize and
1294+
select.select([self.rfile._sock], [], [], self.timeout)[0]):
1295+
cursize = len(data)
12951296
# This is a geometric increase in read size (never more
12961297
# than doubling our the current length of data per loop
12971298
# iteration).
12981299
delta = min(cursize, nbytes - cursize)
12991300
data += self.rfile.read(delta)
1300-
cursize += delta
13011301
else:
13021302
data = None
13031303
# throw away additional data [see bug #427345]

Lib/test/test_httpservers.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1132,11 +1132,12 @@ def test_large_content_length(self):
11321132
self.assertEqual(res.read(), b'%d %d' % (size, size) + self.linesep)
11331133

11341134
def test_large_content_length_truncated(self):
1135-
for w in range(18, 65):
1136-
size = 1 << w
1137-
headers = {'Content-Length' : str(size)}
1138-
res = self.request('/cgi-bin/file1.py', 'POST', b'x', headers)
1139-
self.assertEqual(res.read(), b'Hello World' + self.linesep)
1135+
with support.swap_attr(self.request_handler, 'timeout', 0.001):
1136+
for w in range(18, 65):
1137+
size = 1 << w
1138+
headers = {'Content-Length' : str(size)}
1139+
res = self.request('/cgi-bin/file1.py', 'POST', b'x', headers)
1140+
self.assertEqual(res.read(), b'Hello World' + self.linesep)
11401141

11411142
def test_invaliduri(self):
11421143
res = self.request('/cgi-bin/invalid')

0 commit comments

Comments
 (0)