Issue 32465: [urllib] proxy_bypass_registry - extra error handling required for ProxyOverride, Windows under proxy environment (original) (raw)
[Problem]
- String value from registry Proxy override is read and incorrectly decides the current connection requires not to use proxy.
[Setup]
- Using urllib under proxy environment.
- Proxy bypass settings are in place. ProxyOverride string value in registry ends with ;
[Detail] https://github.com/python/cpython/blob/2.7/Lib/urllib.py proxy_bypass_registry has an issue
- It gets registry value from HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings ProxyEnable string value.
- Splits the string with ;. And as the registry value ends with ; the split list contains a zero length string at the end.
- Use the split string to re.match. And as there is zero length string at the end it, and the result of re.match('', 'anystring', re.I) is always not None.
- Afterwards connection is attempted without using the proxy, hence connection cannot be made
From line 1617
proxyOverride = proxyOverride.split(';')
# now check if we match one of the registry values.
for test in proxyOverride:
if test == '<local>':
if '.' not in rawHost:
return 1
test = test.replace(".", r"\.") # mask dots
test = test.replace("*", r".*") # change glob sequence
test = test.replace("?", r".") # change glob char
for val in host:
# print "%s <--> %s" %( test, val )
if re.match(test, val, re.I):
return 1