diff options
author | jdemeyer <jdemeyer@cage.ugent.be> | 2018-10-19 21:50:06 (GMT) |
---|---|---|
committer | Victor Stinner <vstinner@redhat.com> | 2018-10-19 21:50:06 (GMT) |
commit | 5a30620e68ebb911eef4d583de3776d782148637 (patch) | |
tree | e33bb26ccf2ab594a27b3c785e23354580de457c /Lib | |
parent | b2e2025941f6a4fdb716bd141d31acf720353d21 (diff) | |
download | cpython-5a30620e68ebb911eef4d583de3776d782148637.zip cpython-5a30620e68ebb911eef4d583de3776d782148637.tar.gz cpython-5a30620e68ebb911eef4d583de3776d782148637.tar.bz2 |
bpo-25750: Add test on bad descriptor __get__() (GH-9084)
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/test/test_descr.py | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py index b96d35c..b38cb76 100644 --- a/Lib/test/test_descr.py +++ b/Lib/test/test_descr.py @@ -13,6 +13,11 @@ import weakref from copy import deepcopy from test import support +try: + import _testcapi +except ImportError: + _testcapi = None + class OperatorsTest(unittest.TestCase): @@ -4757,6 +4762,22 @@ order (MRO) for bases """ self.assertRegex(repr(method), r"<bound method qualname of <object object at .*>>") + @unittest.skipIf(_testcapi is None, 'need the _testcapi module') + def test_bpo25750(self): + # bpo-25750: calling a descriptor (implemented as built-in + # function with METH_FASTCALL) should not crash CPython if the + # descriptor deletes itself from the class. + class Descr: + __get__ = _testcapi.bad_get + + class X: + descr = Descr() + def __new__(cls): + cls.descr = None + # Create this large list to corrupt some unused memory + cls.lst = [2**i for i in range(10000)] + X.descr + class DictProxyTests(unittest.TestCase): def setUp(self): |