Invalid parsing of Forwarded header fixed

_parse_rfc7239_header() did not parse properly
a Forwarded header with additional spaces

Closes-Bug: #1711573
Change-Id: Ic8b7f9698d7b3440005b17d249b1c8f0f66dae8a
(cherry picked from commit 480d60ac85)
This commit is contained in:
Adam Kijak 2017-08-18 13:23:10 +02:00 committed by Maciej Jozefczyk
parent db1fac7401
commit d9ad4bae1e
2 changed files with 13 additions and 1 deletions

View File

@ -49,7 +49,7 @@ class HTTPProxyToWSGI(base.ConfigurableMiddleware):
entry = {}
for d in proxy.split(";"):
key, _, value = d.partition("=")
entry[key.lower()] = value
entry[key.lower().strip()] = value.strip()
result.append(entry)
return result

View File

@ -89,6 +89,18 @@ class TestHTTPProxyToWSGI(test_base.BaseTestCase):
response = self.request.get_response(self.middleware)
self.assertEqual(b"https://localhost:80/", response.body)
def test__parse_rfc7239_header(self):
expected_result = [{'for': 'foobar', 'proto': 'https'},
{'for': 'foobaz', 'proto': 'http'}]
result = self.middleware._parse_rfc7239_header(
"for=foobar;proto=https, for=foobaz;proto=http")
self.assertEqual(expected_result, result)
result = self.middleware._parse_rfc7239_header(
"for=foobar; proto=https, for=foobaz; proto=http")
self.assertEqual(expected_result, result)
def test_rfc7239_proto_host(self):
self.request.headers['Forwarded'] = (
"for=foobar;proto=https;host=example.com, for=foobaz;proto=http")