From 175109e44e419dcc1792d8f7171782448c5c3ea4 Mon Sep 17 00:00:00 2001 From: Shadab Zafar Date: Thu, 18 Feb 2016 07:01:52 +0530 Subject: [PATCH] Use host header values only when the ports match --- netlib/netlib/http/request.py | 7 ++++++- test/netlib/http/test_request.py | 8 ++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/netlib/netlib/http/request.py b/netlib/netlib/http/request.py index 2be3f2371..f53678b7a 100644 --- a/netlib/netlib/http/request.py +++ b/netlib/netlib/http/request.py @@ -183,7 +183,12 @@ class Request(Message): This is useful in transparent mode where :py:attr:`host` is only an IP address, but may not reflect the actual destination as the Host header could be spoofed. """ - return self._parse_host_header()[0] or self.host + host, port = self._parse_host_header() + if not host: + return self.host + if not port: + port = 443 if self.scheme == 'https' else 80 + return host if port == self.port else self.host @property def pretty_url(self): diff --git a/test/netlib/http/test_request.py b/test/netlib/http/test_request.py index 4f8a34c22..350b54056 100644 --- a/test/netlib/http/test_request.py +++ b/test/netlib/http/test_request.py @@ -104,19 +104,23 @@ class TestRequestUtils(object): def test_pretty_host(self): request = treq() + # Without host header assert request.pretty_host == "address" assert request.host == "address" + # Same port as self.port (22) request.headers["host"] = "other:22" assert request.pretty_host == "other" + # Different Ports request.headers["host"] = "other" - assert request.pretty_host == "other" + assert request.pretty_host == "address" assert request.host == "address" + # Empty host request.host = None assert request.pretty_host is None assert request.host is None # Invalid IDNA - request.headers["host"] = ".disqus.com" + request.headers["host"] = ".disqus.com:22" assert request.pretty_host == ".disqus.com" def test_pretty_url(self):