mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
#900744: If an invalid chunked-encoding header is sent by a server,
httplib will now raise IncompleteRead and close the connection instead of raising ValueError.
This commit is contained in:
parent
5e8e6d2454
commit
2363503074
3 changed files with 40 additions and 1 deletions
|
@ -546,7 +546,13 @@ class HTTPResponse:
|
|||
i = line.find(';')
|
||||
if i >= 0:
|
||||
line = line[:i] # strip chunk-extensions
|
||||
chunk_left = int(line, 16)
|
||||
try:
|
||||
chunk_left = int(line, 16)
|
||||
except ValueError:
|
||||
# close the connection as protocol synchronisation is
|
||||
# probably lost
|
||||
self.close()
|
||||
raise IncompleteRead(value)
|
||||
if chunk_left == 0:
|
||||
break
|
||||
if amt is None:
|
||||
|
|
|
@ -156,6 +156,35 @@ class BasicTest(TestCase):
|
|||
conn.request('GET', '/foo', body)
|
||||
self.assertTrue(sock.data.startswith(expected))
|
||||
|
||||
def test_chunked(self):
|
||||
chunked_start = (
|
||||
'HTTP/1.1 200 OK\r\n'
|
||||
'Transfer-Encoding: chunked\r\n\r\n'
|
||||
'a\r\n'
|
||||
'hello worl\r\n'
|
||||
'1\r\n'
|
||||
'd\r\n'
|
||||
)
|
||||
sock = FakeSocket(chunked_start + '0\r\n')
|
||||
resp = httplib.HTTPResponse(sock, method="GET")
|
||||
resp.begin()
|
||||
self.assertEquals(resp.read(), 'hello world')
|
||||
resp.close()
|
||||
|
||||
for x in ('', 'foo\r\n'):
|
||||
sock = FakeSocket(chunked_start + x)
|
||||
resp = httplib.HTTPResponse(sock, method="GET")
|
||||
resp.begin()
|
||||
try:
|
||||
resp.read()
|
||||
except httplib.IncompleteRead, i:
|
||||
self.assertEquals(i.partial, 'hello world')
|
||||
else:
|
||||
self.fail('IncompleteRead expected')
|
||||
finally:
|
||||
resp.close()
|
||||
|
||||
|
||||
class OfflineTest(TestCase):
|
||||
def test_responses(self):
|
||||
self.assertEquals(httplib.responses[httplib.NOT_FOUND], "Not Found")
|
||||
|
|
|
@ -441,6 +441,10 @@ Core and builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- #900744: If an invalid chunked-encoding header is sent by a server,
|
||||
httplib will now raise IncompleteRead and close the connection instead
|
||||
of raising ValueError.
|
||||
|
||||
- #1492: The content type of BaseHTTPServer error messages can now be
|
||||
overridden.
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue