Commit 959ff7f1 authored by Xiang Zhang's avatar Xiang Zhang

Issue #29142: Fix suffixes in no_proxy handling in urllib.

In urllib.request, suffixes in no_proxy environment variable with
leading dots could match related hostnames again (e.g. .b.c matches a.b.c).
Patch by Milan Oberkirch.
parent 8cbd46f1
...@@ -247,11 +247,12 @@ class ProxyTests(unittest.TestCase): ...@@ -247,11 +247,12 @@ class ProxyTests(unittest.TestCase):
def test_proxy_bypass_environment_host_match(self): def test_proxy_bypass_environment_host_match(self):
bypass = urllib.request.proxy_bypass_environment bypass = urllib.request.proxy_bypass_environment
self.env.set('NO_PROXY', self.env.set('NO_PROXY',
'localhost, anotherdomain.com, newdomain.com:1234') 'localhost, anotherdomain.com, newdomain.com:1234, .d.o.t')
self.assertTrue(bypass('localhost')) self.assertTrue(bypass('localhost'))
self.assertTrue(bypass('LocalHost')) # MixedCase self.assertTrue(bypass('LocalHost')) # MixedCase
self.assertTrue(bypass('LOCALHOST')) # UPPERCASE self.assertTrue(bypass('LOCALHOST')) # UPPERCASE
self.assertTrue(bypass('newdomain.com:1234')) self.assertTrue(bypass('newdomain.com:1234'))
self.assertTrue(bypass('foo.d.o.t')) # issue 29142
self.assertTrue(bypass('anotherdomain.com:8888')) self.assertTrue(bypass('anotherdomain.com:8888'))
self.assertTrue(bypass('www.newdomain.com:1234')) self.assertTrue(bypass('www.newdomain.com:1234'))
self.assertFalse(bypass('prelocalhost')) self.assertFalse(bypass('prelocalhost'))
......
...@@ -2450,6 +2450,7 @@ def proxy_bypass_environment(host, proxies=None): ...@@ -2450,6 +2450,7 @@ def proxy_bypass_environment(host, proxies=None):
no_proxy_list = [proxy.strip() for proxy in no_proxy.split(',')] no_proxy_list = [proxy.strip() for proxy in no_proxy.split(',')]
for name in no_proxy_list: for name in no_proxy_list:
if name: if name:
name = name.lstrip('.') # ignore leading dots
name = re.escape(name) name = re.escape(name)
pattern = r'(.+\.)?%s$' % name pattern = r'(.+\.)?%s$' % name
if (re.match(pattern, hostonly, re.I) if (re.match(pattern, hostonly, re.I)
......
...@@ -13,6 +13,9 @@ Core and Builtins ...@@ -13,6 +13,9 @@ Core and Builtins
Library Library
------- -------
- Issue #29142: In urllib.request, suffixes in no_proxy environment variable with
leading dots could match related hostnames again (e.g. .b.c matches a.b.c).
Patch by Milan Oberkirch.
What's New in Python 3.5.3 release candidate 1? What's New in Python 3.5.3 release candidate 1?
=============================================== ===============================================
......
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