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.
This commit is contained in:
Xiang Zhang 2017-01-09 11:47:55 +08:00
parent 8cbd46f19f
commit 959ff7f1c6
3 changed files with 6 additions and 1 deletions

View file

@ -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'))

View file

@ -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)

View file

@ -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?
=============================================== ===============================================