diff options
-rw-r--r-- | Lib/test/test_urllib2.py | 5 | ||||
-rw-r--r-- | Lib/urllib2.py | 8 | ||||
-rw-r--r-- | Misc/NEWS | 2 |
3 files changed, 10 insertions, 5 deletions
diff --git a/Lib/test/test_urllib2.py b/Lib/test/test_urllib2.py index 32ffd0a..5a631b3 100644 --- a/Lib/test/test_urllib2.py +++ b/Lib/test/test_urllib2.py @@ -1350,6 +1350,11 @@ class RequestTests(unittest.TestCase): req = Request(url) self.assertEqual(req.get_full_url(), url) + def test_private_attributes(self): + self.assertFalse(hasattr(self.get, '_Request__r_xxx')) + # Issue #6500: infinite recursion + self.assertFalse(hasattr(self.get, '_Request__r_method')) + def test_HTTPError_interface(self): """ Issue 13211 reveals that HTTPError didn't implement the URLError diff --git a/Lib/urllib2.py b/Lib/urllib2.py index 9277b1d..8ec5e2a 100644 --- a/Lib/urllib2.py +++ b/Lib/urllib2.py @@ -248,11 +248,9 @@ class Request: # methods getting called in a non-standard order. this may be # too complicated and/or unnecessary. # XXX should the __r_XXX attributes be public? - if attr[:12] == '_Request__r_': - name = attr[12:] - if hasattr(Request, 'get_' + name): - getattr(self, 'get_' + name)() - return getattr(self, attr) + if attr in ('_Request__r_type', '_Request__r_host'): + getattr(self, 'get_' + attr[12:])() + return self.__dict__[attr] raise AttributeError, attr def get_method(self): @@ -39,6 +39,8 @@ Core and Builtins Library ------- +- Issue #6500: Fixed infinite recursion in urllib2.Request.__getattr__(). + - Issue #26083: Workaround a subprocess bug that raises an incorrect "ValueError: insecure string pickle" exception instead of the actual exception on some platforms such as Mac OS X when an exception raised |