Fixes #10860: Handle empty port after port delimiter in httplib
Thanks, Shawn Ligocki! 3.x version will come as a separate patch.
This commit is contained in:
parent
086f927f25
commit
7a15390f83
|
@ -715,7 +715,10 @@ class HTTPConnection:
|
||||||
try:
|
try:
|
||||||
port = int(host[i+1:])
|
port = int(host[i+1:])
|
||||||
except ValueError:
|
except ValueError:
|
||||||
raise InvalidURL("nonnumeric port: '%s'" % host[i+1:])
|
if host[i+1:] == "": # http://foo.com:/ == http://foo.com/
|
||||||
|
port = self.default_port
|
||||||
|
else:
|
||||||
|
raise InvalidURL("nonnumeric port: '%s'" % host[i+1:])
|
||||||
host = host[:i]
|
host = host[:i]
|
||||||
else:
|
else:
|
||||||
port = self.default_port
|
port = self.default_port
|
||||||
|
|
|
@ -152,13 +152,15 @@ 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:"):
|
# Note that httplib does not accept user:password@ in the host-port.
|
||||||
|
for hp in ("www.python.org:abc", "user:password@www.python.org"):
|
||||||
self.assertRaises(httplib.InvalidURL, httplib.HTTP, hp)
|
self.assertRaises(httplib.InvalidURL, httplib.HTTP, hp)
|
||||||
|
|
||||||
for hp, h, p in (("[fe80::207:e9ff:fe9b]:8000", "fe80::207:e9ff:fe9b",
|
for hp, h, p in (("[fe80::207:e9ff:fe9b]:8000", "fe80::207:e9ff:fe9b",
|
||||||
8000),
|
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)):
|
||||||
http = httplib.HTTP(hp)
|
http = httplib.HTTP(hp)
|
||||||
c = http._conn
|
c = http._conn
|
||||||
|
@ -439,6 +441,27 @@ class HTTPSTimeoutTest(TestCase):
|
||||||
h = httplib.HTTPSConnection(HOST, TimeoutTest.PORT, timeout=30)
|
h = httplib.HTTPSConnection(HOST, TimeoutTest.PORT, timeout=30)
|
||||||
self.assertEqual(h.timeout, 30)
|
self.assertEqual(h.timeout, 30)
|
||||||
|
|
||||||
|
def test_host_port(self):
|
||||||
|
# Check invalid host_port
|
||||||
|
|
||||||
|
# Note that httplib does not accept user:password@ in the host-port.
|
||||||
|
for hp in ("www.python.org:abc", "user:password@www.python.org"):
|
||||||
|
self.assertRaises(httplib.InvalidURL, httplib.HTTP, hp)
|
||||||
|
|
||||||
|
for hp, h, p in (("[fe80::207:e9ff:fe9b]:8000", "fe80::207:e9ff:fe9b",
|
||||||
|
8000),
|
||||||
|
("pypi.python.org:443", "pypi.python.org", 443),
|
||||||
|
("pypi.python.org", "pypi.python.org", 443),
|
||||||
|
("pypi.python.org:", "pypi.python.org", 443),
|
||||||
|
("[fe80::207:e9ff:fe9b]", "fe80::207:e9ff:fe9b", 443)):
|
||||||
|
http = httplib.HTTPS(hp)
|
||||||
|
c = http._conn
|
||||||
|
if h != c.host:
|
||||||
|
self.fail("Host incorrectly parsed: %s != %s" % (h, c.host))
|
||||||
|
if p != c.port:
|
||||||
|
self.fail("Port incorrectly parsed: %s != %s" % (p, c.host))
|
||||||
|
|
||||||
|
|
||||||
def test_main(verbose=None):
|
def test_main(verbose=None):
|
||||||
test_support.run_unittest(HeaderTests, OfflineTest, BasicTest, TimeoutTest,
|
test_support.run_unittest(HeaderTests, OfflineTest, BasicTest, TimeoutTest,
|
||||||
HTTPSTimeoutTest, SourceAddressTest)
|
HTTPSTimeoutTest, SourceAddressTest)
|
||||||
|
|
|
@ -54,6 +54,9 @@ Core and Builtins
|
||||||
the following case: sys.stdin.read() stopped with CTRL+d (end of file),
|
the following case: sys.stdin.read() stopped with CTRL+d (end of file),
|
||||||
raw_input() interrupted by CTRL+c.
|
raw_input() interrupted by CTRL+c.
|
||||||
|
|
||||||
|
- Issue #10860: httplib now correctly handles an empty port after port
|
||||||
|
delimiter in URLs.
|
||||||
|
|
||||||
- dict_proxy objects now display their contents rather than just the class
|
- dict_proxy objects now display their contents rather than just the class
|
||||||
name.
|
name.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue