From: Berker Peksag Date: Wed, 6 Jan 2016 00:04:52 +0000 (+0200) Subject: Issue #6500: Fix "maximum recursion depth exceeded" error caused by Request.__getattr__() X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=621d7fd5839732cec2b5c23b64ed30618960ce61;p=python Issue #6500: Fix "maximum recursion depth exceeded" error caused by Request.__getattr__() --- diff --git a/Lib/test/test_urllib2.py b/Lib/test/test_urllib2.py index 32ffd0acef..12a189a952 100644 --- a/Lib/test/test_urllib2.py +++ b/Lib/test/test_urllib2.py @@ -1302,6 +1302,13 @@ class RequestTests(unittest.TestCase): 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 --git a/Lib/urllib2.py b/Lib/urllib2.py index 9277b1d1cd..1ae229e074 100644 --- a/Lib/urllib2.py +++ b/Lib/urllib2.py @@ -251,8 +251,7 @@ class Request: 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 --git a/Misc/NEWS b/Misc/NEWS index e28bc87fd0..13474c9711 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -36,6 +36,9 @@ Core and Builtins 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