Commit d85d660c authored by Łukasz Langa's avatar Łukasz Langa

Fixes #10860: Handle empty port after port delimiter in httplib

parent bbb7d6f2
...@@ -678,6 +678,9 @@ class HTTPConnection: ...@@ -678,6 +678,9 @@ class HTTPConnection:
try: try:
port = int(host[i+1:]) port = int(host[i+1:])
except ValueError: except ValueError:
if host[i+1:] == "": # http://foo.com:/ == http://foo.com/
port = self.default_port
else:
raise InvalidURL("nonnumeric port: '%s'" % host[i+1:]) raise InvalidURL("nonnumeric port: '%s'" % host[i+1:])
host = host[:i] host = host[:i]
else: else:
......
...@@ -161,14 +161,16 @@ class BasicTest(TestCase): ...@@ -161,14 +161,16 @@ class BasicTest(TestCase):
def test_host_port(self): def test_host_port(self):
# Check invalid host_port # Check invalid host_port
for hp in ("www.python.org:abc", "www.python.org:"): for hp in ("www.python.org:abc", "user:password@www.python.org"):
self.assertRaises(client.InvalidURL, client.HTTPConnection, hp) self.assertRaises(client.InvalidURL, client.HTTPConnection, hp)
for hp, h, p in (("[fe80::207:e9ff:fe9b]:8000", for hp, h, p in (("[fe80::207:e9ff:fe9b]:8000",
"fe80::207:e9ff:fe9b", 8000), "fe80::207:e9ff:fe9b", 8000),
("www.python.org:80", "www.python.org", 80), ("www.python.org:80", "www.python.org", 80),
("www.python.org:", "www.python.org", 80),
("www.python.org", "www.python.org", 80), ("www.python.org", "www.python.org", 80),
("[fe80::207:e9ff:fe9b]", "fe80::207:e9ff:fe9b", 80)): ("[fe80::207:e9ff:fe9b]", "fe80::207:e9ff:fe9b", 80),
("[fe80::207:e9ff:fe9b]:", "fe80::207:e9ff:fe9b", 80)):
c = client.HTTPConnection(hp) c = client.HTTPConnection(hp)
self.assertEqual(h, c.host) self.assertEqual(h, c.host)
self.assertEqual(p, c.port) self.assertEqual(p, c.port)
...@@ -539,6 +541,24 @@ class HTTPSTest(TestCase): ...@@ -539,6 +541,24 @@ class HTTPSTest(TestCase):
resp = h.getresponse() resp = h.getresponse()
self.assertEqual(resp.status, 404) self.assertEqual(resp.status, 404)
def test_host_port(self):
# Check invalid host_port
for hp in ("www.python.org:abc", "user:password@www.python.org"):
self.assertRaises(client.InvalidURL, client.HTTPSConnection, hp)
for hp, h, p in (("[fe80::207:e9ff:fe9b]:8000",
"fe80::207:e9ff:fe9b", 8000),
("www.python.org:443", "www.python.org", 443),
("www.python.org:", "www.python.org", 443),
("www.python.org", "www.python.org", 443),
("[fe80::207:e9ff:fe9b]", "fe80::207:e9ff:fe9b", 443),
("[fe80::207:e9ff:fe9b]:", "fe80::207:e9ff:fe9b",
443)):
c = client.HTTPSConnection(hp)
self.assertEqual(h, c.host)
self.assertEqual(p, c.port)
class RequestBodyTest(TestCase): class RequestBodyTest(TestCase):
"""Test cases where a request includes a message body.""" """Test cases where a request includes a message body."""
......
...@@ -137,6 +137,9 @@ Library ...@@ -137,6 +137,9 @@ Library
- Issue #12650: Fix a race condition where a subprocess.Popen could leak - Issue #12650: Fix a race condition where a subprocess.Popen could leak
resources (FD/zombie) when killed at the wrong time. resources (FD/zombie) when killed at the wrong time.
- Issue #10860: http.client now correctly handles an empty port after port
delimiter in URLs.
Tests Tests
----- -----
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment