(original) (raw)
changeset: 99772:fbea8ff8db5e branch: 2.7 parent: 99770:f2a846c1b593 user: Berker Peksag berker.peksag@gmail.com date: Wed Jan 06 02:04:52 2016 +0200 files: Lib/test/test_urllib2.py Lib/urllib2.py Misc/NEWS description: Issue #6500: Fix "maximum recursion depth exceeded" error caused by Request.__getattr__() diff -r f2a846c1b593 -r fbea8ff8db5e Lib/test/test_urllib2.py --- a/Lib/test/test_urllib2.py Mon Jan 04 22:40:39 2016 -0800 +++ b/Lib/test/test_urllib2.py Wed Jan 06 02:04:52 2016 +0200 @@ -1302,6 +1302,13 @@ self.assertEqual("POST", self.post.get_method()) self.assertEqual("GET", self.get.get_method()) + def test___getattr__(self): + self.assertEqual("GET", self.get._Request__r_method) + self.assertEqual("http://www.python.org/\~jeremy/", + self.get._Request__r_full_url) + with self.assertRaises(AttributeError): + self.get._Request__r_invalid_attr + def test_add_data(self): self.assertTrue(not self.get.has_data()) self.assertEqual("GET", self.get.get_method()) diff -r f2a846c1b593 -r fbea8ff8db5e Lib/urllib2.py --- a/Lib/urllib2.py Mon Jan 04 22:40:39 2016 -0800 +++ b/Lib/urllib2.py Wed Jan 06 02:04:52 2016 +0200 @@ -251,8 +251,7 @@ if attr[:12] == '_Request__r_': name = attr[12:] if hasattr(Request, 'get_' + name): - getattr(self, 'get_' + name)() - return getattr(self, attr) + return getattr(self, 'get_' + name)() raise AttributeError, attr def get_method(self): diff -r f2a846c1b593 -r fbea8ff8db5e Misc/NEWS --- a/Misc/NEWS Mon Jan 04 22:40:39 2016 -0800 +++ b/Misc/NEWS Wed Jan 06 02:04:52 2016 +0200 @@ -36,6 +36,9 @@ Library ------- +- Issue #6500: Fix "maximum recursion depth exceeded" error caused + by urllib2.Request.__getattr__(). + - Issue #24103: Fixed possible use after free in ElementTree.iterparse(). - Issue #20954: _args_from_interpreter_flags used by multiprocessing and some /berker.peksag@gmail.com