An interpreted, interactive, object-oriented programming language
CentOS Sources
2017-08-01 71084d584ff953f5463757ec6536406320560b4d
commit | author | age
f63228 1
CS 2 # HG changeset patch
3 # User Berker Peksag <berker.peksag@gmail.com>
4 # Date 1407212157 -10800
5 # Node ID 5e310c6a8520603bca8bc4b40eaf4f074db47c0d
6 # Parent  46c7a724b487295257423a69478392cb01ce74e6
7 Issue #16037: HTTPMessage.readheaders() raises an HTTPException when more
8 than 100 headers are read.
9
10 Patch by Jyrki Pulliainen and Daniel Eriksson.
11
12 diff --git a/Lib/httplib.py b/Lib/httplib.py
13 --- a/Lib/httplib.py
14 +++ b/Lib/httplib.py
15 @@ -215,6 +215,10 @@ MAXAMOUNT = 1048576
16  # maximal line length when calling readline().
17  _MAXLINE = 65536
18  
19 +# maximum amount of headers accepted
20 +_MAXHEADERS = 100
21 +
22 +
23  class HTTPMessage(mimetools.Message):
24  
25      def addheader(self, key, value):
26 @@ -271,6 +275,8 @@ class HTTPMessage(mimetools.Message):
27          elif self.seekable:
28              tell = self.fp.tell
29          while True:
30 +            if len(hlist) > _MAXHEADERS:
31 +                raise HTTPException("got more than %d headers" % _MAXHEADERS)
32              if tell:
33                  try:
34                      startofline = tell()
35 diff --git a/Lib/test/test_httplib.py b/Lib/test/test_httplib.py
36 --- a/Lib/test/test_httplib.py
37 +++ b/Lib/test/test_httplib.py
38 @@ -262,6 +262,13 @@ class BasicTest(TestCase):
39          if resp.read() != "":
40              self.fail("Did not expect response from HEAD request")
41  
42 +    def test_too_many_headers(self):
43 +        headers = '\r\n'.join('Header%d: foo' % i for i in xrange(200)) + '\r\n'
44 +        text = ('HTTP/1.1 200 OK\r\n' + headers)
45 +        s = FakeSocket(text)
46 +        r = httplib.HTTPResponse(s)
47 +        self.assertRaises(httplib.HTTPException, r.begin)
48 +
49      def test_send_file(self):
50          expected = 'GET /foo HTTP/1.1\r\nHost: example.com\r\n' \
51                     'Accept-Encoding: identity\r\nContent-Length:'