mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
inspect: Validate that __signature__ is None or an instance of Signature.
Closes #21801.
This commit is contained in:
parent
751c7c0f2d
commit
c0f964fd55
3 changed files with 13 additions and 0 deletions
|
@ -1912,6 +1912,10 @@ def _signature_internal(obj, follow_wrapper_chains=True, skip_bound_arg=True):
|
|||
pass
|
||||
else:
|
||||
if sig is not None:
|
||||
if not isinstance(sig, Signature):
|
||||
raise TypeError(
|
||||
'unexpected object {!r} in __signature__ '
|
||||
'attribute'.format(sig))
|
||||
return sig
|
||||
|
||||
try:
|
||||
|
|
|
@ -3048,6 +3048,13 @@ class TestMain(unittest.TestCase):
|
|||
self.assertEqual(lines[:-1], inspect.getsource(module).splitlines())
|
||||
self.assertEqual(err, b'')
|
||||
|
||||
def test_custom_getattr(self):
|
||||
def foo():
|
||||
pass
|
||||
foo.__signature__ = 42
|
||||
with self.assertRaises(TypeError):
|
||||
inspect.signature(foo)
|
||||
|
||||
@unittest.skipIf(ThreadPoolExecutor is None,
|
||||
'threads required to test __qualname__ for source files')
|
||||
def test_qualname_source(self):
|
||||
|
|
|
@ -105,6 +105,8 @@ Library
|
|||
- Issue #21538: The plistlib module now supports loading of binary plist files
|
||||
when reference or offset size is not a power of two.
|
||||
|
||||
- Issue #21801: Validate that __signature__ is None or an instance of Signature.
|
||||
|
||||
Build
|
||||
-----
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue