summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorjdemeyer <jdemeyer@cage.ugent.be>2018-10-19 21:50:06 (GMT)
committerVictor Stinner <vstinner@redhat.com>2018-10-19 21:50:06 (GMT)
commit5a30620e68ebb911eef4d583de3776d782148637 (patch)
treee33bb26ccf2ab594a27b3c785e23354580de457c /Lib
parentb2e2025941f6a4fdb716bd141d31acf720353d21 (diff)
downloadcpython-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.py21
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):