summaryrefslogtreecommitdiff
path: root/Lib/test/test_descr.py
diff options
context:
space:
mode:
authorDennis Sweeney <36520290+sweeneyde@users.noreply.github.com>2022-04-30 14:35:33 -0400
committerGitHub <noreply@github.com>2022-04-30 12:35:33 -0600
commit868b1afa05c7847e6ffdd1808916719b511b4bcc (patch)
tree1befed8275e5b8cbcf5772be69f2f9bae9b7c41c /Lib/test/test_descr.py
parent3a8e2b6e65fea1252477f6e29a384fa9a492ed06 (diff)
downloadcpython-git-868b1afa05c7847e6ffdd1808916719b511b4bcc.tar.gz
gh-92063: Enforce types in specialized PRECALL opcodes (GH-92068)
* Check the types of PRECALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS * fix PRECALL_NO_KW_METHOD_DESCRIPTOR_NOARGS as well * fix PRECALL_NO_KW_METHOD_DESCRIPTOR_O * fix PRECALL_NO_KW_METHOD_DESCRIPTOR_FAST
Diffstat (limited to 'Lib/test/test_descr.py')
-rw-r--r--Lib/test/test_descr.py27
1 files changed, 27 insertions, 0 deletions
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py
index 378ff5227e..48d43d7af8 100644
--- a/Lib/test/test_descr.py
+++ b/Lib/test/test_descr.py
@@ -4726,6 +4726,33 @@ order (MRO) for bases """
with self.assertRaises(TypeError):
str.__add__(fake_str, "abc")
+ def test_specialized_method_calls_check_types(self):
+ # https://github.com/python/cpython/issues/92063
+ class Thing:
+ pass
+ thing = Thing()
+ for i in range(20):
+ with self.assertRaises(TypeError):
+ # PRECALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS
+ list.sort(thing)
+ for i in range(20):
+ with self.assertRaises(TypeError):
+ # PRECALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS
+ str.split(thing)
+ for i in range(20):
+ with self.assertRaises(TypeError):
+ # PRECALL_NO_KW_METHOD_DESCRIPTOR_NOARGS
+ str.upper(thing)
+ for i in range(20):
+ with self.assertRaises(TypeError):
+ # PRECALL_NO_KW_METHOD_DESCRIPTOR_FAST
+ str.strip(thing)
+ from collections import deque
+ for i in range(20):
+ with self.assertRaises(TypeError):
+ # PRECALL_NO_KW_METHOD_DESCRIPTOR_O
+ deque.append(thing, thing)
+
def test_repr_as_str(self):
# Issue #11603: crash or infinite loop when rebinding __str__ as
# __repr__.