mirror of
https://github.com/AdaCore/cpython.git
synced 2026-02-12 12:57:15 -08:00
@@ -313,6 +313,11 @@ class HTTPMessage(mimetools.Message):
|
||||
hlist.append(line)
|
||||
self.addheader(headerseen, line[len(headerseen)+1:].strip())
|
||||
continue
|
||||
elif headerseen is not None:
|
||||
# An empty header name. These aren't allowed in HTTP, but it's
|
||||
# probably a benign mistake. Don't add the header, just keep
|
||||
# going.
|
||||
continue
|
||||
else:
|
||||
# It's not a header line; throw it back and stop here.
|
||||
if not self.dict:
|
||||
|
||||
@@ -179,6 +179,11 @@ class Message:
|
||||
lst.append(line)
|
||||
self.dict[headerseen] = line[len(headerseen)+1:].strip()
|
||||
continue
|
||||
elif headerseen is not None:
|
||||
# An empty header name. These aren't allowed in HTTP, but it's
|
||||
# probably a benign mistake. Don't add the header, just keep
|
||||
# going.
|
||||
continue
|
||||
else:
|
||||
# It's not a header line; throw it back and stop here.
|
||||
if not self.dict:
|
||||
@@ -202,7 +207,7 @@ class Message:
|
||||
data in RFC 2822-like formats with special header formats.
|
||||
"""
|
||||
i = line.find(':')
|
||||
if i > 0:
|
||||
if i > -1:
|
||||
return line[:i].lower()
|
||||
return None
|
||||
|
||||
|
||||
@@ -164,6 +164,16 @@ class HeaderTests(TestCase):
|
||||
conn.request('GET', '/foo')
|
||||
self.assertTrue(sock.data.startswith(expected))
|
||||
|
||||
def test_malformed_headers_coped_with(self):
|
||||
# Issue 19996
|
||||
body = "HTTP/1.1 200 OK\r\nFirst: val\r\n: nval\r\nSecond: val\r\n\r\n"
|
||||
sock = FakeSocket(body)
|
||||
resp = httplib.HTTPResponse(sock)
|
||||
resp.begin()
|
||||
|
||||
self.assertEqual(resp.getheader('First'), 'val')
|
||||
self.assertEqual(resp.getheader('Second'), 'val')
|
||||
|
||||
|
||||
class BasicTest(TestCase):
|
||||
def test_status_lines(self):
|
||||
|
||||
@@ -248,6 +248,12 @@ A test message.
|
||||
eq(rfc822.quote('foo\\wacky"name'), 'foo\\\\wacky\\"name')
|
||||
eq(rfc822.unquote('"foo\\\\wacky\\"name"'), 'foo\\wacky"name')
|
||||
|
||||
def test_invalid_headers(self):
|
||||
eq = self.assertEqual
|
||||
msg = self.create_message("First: val\n: otherval\nSecond: val2\n")
|
||||
eq(msg.getheader('First'), 'val')
|
||||
eq(msg.getheader('Second'), 'val2')
|
||||
|
||||
|
||||
def test_main():
|
||||
test_support.run_unittest(MessageTestCase)
|
||||
|
||||
Reference in New Issue
Block a user