mirror of
https://github.com/python/cpython.git
synced 2025-07-23 11:15:24 +00:00
bpo-44022: Fix http client infinite line reading (DoS) after a HTTP 100 Continue (GH-25916) (GH-25931)
Fixes http.client potential denial of service where it could get stuck reading lines from a malicious server after a 100 Continue response.
Co-authored-by: Gregory P. Smith <greg@krypto.org>
(cherry picked from commit 47895e31b6
)
Co-authored-by: Gen Xu <xgbarry@gmail.com>
This commit is contained in:
parent
24f1d1a8a2
commit
60ba0b6847
3 changed files with 32 additions and 18 deletions
|
@ -1180,6 +1180,14 @@ class BasicTest(TestCase):
|
|||
resp = client.HTTPResponse(FakeSocket(body))
|
||||
self.assertRaises(client.LineTooLong, resp.begin)
|
||||
|
||||
def test_overflowing_header_limit_after_100(self):
|
||||
body = (
|
||||
'HTTP/1.1 100 OK\r\n'
|
||||
'r\n' * 32768
|
||||
)
|
||||
resp = client.HTTPResponse(FakeSocket(body))
|
||||
self.assertRaises(client.HTTPException, resp.begin)
|
||||
|
||||
def test_overflowing_chunked_line(self):
|
||||
body = (
|
||||
'HTTP/1.1 200 OK\r\n'
|
||||
|
@ -1581,7 +1589,7 @@ class Readliner:
|
|||
class OfflineTest(TestCase):
|
||||
def test_all(self):
|
||||
# Documented objects defined in the module should be in __all__
|
||||
expected = {"responses"} # White-list documented dict() object
|
||||
expected = {"responses"} # Allowlist documented dict() object
|
||||
# HTTPMessage, parse_headers(), and the HTTP status code constants are
|
||||
# intentionally omitted for simplicity
|
||||
denylist = {"HTTPMessage", "parse_headers"}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue