Kaydet (Commit) c0f964fd authored tarafından Yury Selivanov's avatar Yury Selivanov

inspect: Validate that __signature__ is None or an instance of Signature.

Closes #21801.
üst 751c7c0f
...@@ -1912,6 +1912,10 @@ def _signature_internal(obj, follow_wrapper_chains=True, skip_bound_arg=True): ...@@ -1912,6 +1912,10 @@ def _signature_internal(obj, follow_wrapper_chains=True, skip_bound_arg=True):
pass pass
else: else:
if sig is not None: if sig is not None:
if not isinstance(sig, Signature):
raise TypeError(
'unexpected object {!r} in __signature__ '
'attribute'.format(sig))
return sig return sig
try: try:
......
...@@ -3048,6 +3048,13 @@ class TestMain(unittest.TestCase): ...@@ -3048,6 +3048,13 @@ class TestMain(unittest.TestCase):
self.assertEqual(lines[:-1], inspect.getsource(module).splitlines()) self.assertEqual(lines[:-1], inspect.getsource(module).splitlines())
self.assertEqual(err, b'') 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, @unittest.skipIf(ThreadPoolExecutor is None,
'threads required to test __qualname__ for source files') 'threads required to test __qualname__ for source files')
def test_qualname_source(self): def test_qualname_source(self):
......
...@@ -105,6 +105,8 @@ Library ...@@ -105,6 +105,8 @@ Library
- Issue #21538: The plistlib module now supports loading of binary plist files - Issue #21538: The plistlib module now supports loading of binary plist files
when reference or offset size is not a power of two. when reference or offset size is not a power of two.
- Issue #21801: Validate that __signature__ is None or an instance of Signature.
Build Build
----- -----
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment