Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 21 additions & 1 deletion Lib/test/test_urllib2.py
Original file line number Diff line number Diff line change
Expand Up @@ -1528,7 +1528,6 @@ def test_proxy_https_proxy_authorization(self):
self.assertEqual(req.host, "proxy.example.com:3128")
self.assertEqual(req.get_header("Proxy-authorization"), "FooBar")

@unittest.skipUnless(os.name == "nt", "only relevant for Windows")
def test_winreg_proxy_bypass(self):
proxy_override = "www.example.com;*.example.net; 192.168.0.1"
proxy_bypass = _proxy_bypass_winreg_override
Expand All @@ -1552,6 +1551,27 @@ def test_winreg_proxy_bypass(self):
"expect <local> to bypass intranet address '%s'"
% host)

def test_winreg_proxy_bypass_trailing_semicolon(self):
proxy_bypass = _proxy_bypass_winreg_override

proxy_override = "example.com;"
self.assertTrue(proxy_bypass("example.com", proxy_override))
self.assertFalse(proxy_bypass("notmatching.com", proxy_override))

proxy_override = ";example.com"
self.assertTrue(proxy_bypass("example.com", proxy_override))
self.assertFalse(proxy_bypass("notmatching.com", proxy_override))

proxy_override = "example.com;;*.example.net;"
self.assertTrue(proxy_bypass("example.com", proxy_override))
self.assertTrue(proxy_bypass("sub.example.net", proxy_override))
self.assertFalse(proxy_bypass("notmatching.com", proxy_override))

proxy_override = "example.com; <local>;"
self.assertTrue(proxy_bypass("example.com", proxy_override))
self.assertTrue(proxy_bypass("localhost", proxy_override))
self.assertFalse(proxy_bypass("notmatching.com", proxy_override))

@unittest.skipUnless(sys.platform == 'darwin', "only relevant for OSX")
def test_osx_proxy_bypass(self):
bypass = {
Expand Down
2 changes: 2 additions & 0 deletions Lib/urllib/request.py
Original file line number Diff line number Diff line change
Expand Up @@ -2024,6 +2024,8 @@ def _proxy_bypass_winreg_override(host, override):
proxy_override = override.split(';')
for test in proxy_override:
test = test.strip()
if not test:
continue
# "<local>" should bypass the proxy server for all intranet addresses
if test == '<local>':
if '.' not in host:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Fix proxy bypass on Windows when the ``ProxyOverride`` registry value
has a trailing semicolon, which previously could cause incorrect results.
Loading