Skip to content

Commit 7322221

Browse files
committed
gh-113199: Make HTTPResponse.read1 close IO after reading all data
1 parent 00d2b6d commit 7322221

File tree

3 files changed

+12
-0
lines changed

3 files changed

+12
-0
lines changed

Lib/http/client.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -665,6 +665,8 @@ def read1(self, n=-1):
665665
self._close_conn()
666666
elif self.length is not None:
667667
self.length -= len(result)
668+
if not self.length:
669+
self._close_conn()
668670
return result
669671

670672
def peek(self, n=-1):

Lib/test/test_httplib.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1577,6 +1577,7 @@ def test_read1_unbounded(self):
15771577
break
15781578
all.append(data)
15791579
self.assertEqual(b"".join(all), self.lines_expected)
1580+
self.assertTrue(resp.isclosed())
15801581

15811582
def test_read1_bounded(self):
15821583
resp = self.resp
@@ -1588,15 +1589,22 @@ def test_read1_bounded(self):
15881589
self.assertLessEqual(len(data), 10)
15891590
all.append(data)
15901591
self.assertEqual(b"".join(all), self.lines_expected)
1592+
self.assertTrue(resp.isclosed())
15911593

15921594
def test_read1_0(self):
15931595
self.assertEqual(self.resp.read1(0), b"")
1596+
self.assertFalse(self.resp.isclosed())
15941597

15951598
def test_peek_0(self):
15961599
p = self.resp.peek(0)
15971600
self.assertLessEqual(0, len(p))
15981601

15991602

1603+
class ExtendedReadTestContentLengthKnown(ExtendedReadTest):
1604+
_header, _body = ExtendedReadTest.lines.split('\r\n\r\n', 1)
1605+
lines = _header + f'Content-Length: {len(_body)}\r\n\r\n' + _body
1606+
1607+
16001608
class ExtendedReadTestChunked(ExtendedReadTest):
16011609
"""
16021610
Test peek(), read1(), readline() in chunked mode
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Make ``http.client.HTTPResponse.read1`` close IO after reading all data when
2+
content length is known. Patch by Illia Volochii.

0 commit comments

Comments
 (0)