diff options
author | Victor Stinner <vstinner@python.org> | 2024-09-25 19:41:09 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-25 19:41:09 (GMT) |
commit | d6954b6421aa34afd280df9c44ded21a2348a6ea (patch) | |
tree | a8bef4710328a6373712d618274459ab73153b6a /Lib | |
parent | 0d9d56c4e4246495f506f7fb319548fb105b535b (diff) | |
download | cpython-d6954b6421aa34afd280df9c44ded21a2348a6ea.zip cpython-d6954b6421aa34afd280df9c44ded21a2348a6ea.tar.gz cpython-d6954b6421aa34afd280df9c44ded21a2348a6ea.tar.bz2 |
gh-124513: Check args in framelocalsproxy_new() (#124515)
Fix a crash in FrameLocalsProxy constructor: check the number of
arguments.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/test/test_frame.py | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/Lib/test/test_frame.py b/Lib/test/test_frame.py index ca88e65..32de8ed 100644 --- a/Lib/test/test_frame.py +++ b/Lib/test/test_frame.py @@ -494,6 +494,27 @@ class TestFrameLocals(unittest.TestCase): with self.assertRaises(TypeError): proxy[obj] = 0 + def test_constructor(self): + FrameLocalsProxy = type([sys._getframe().f_locals + for x in range(1)][0]) + self.assertEqual(FrameLocalsProxy.__name__, 'FrameLocalsProxy') + + def make_frame(): + x = 1 + y = 2 + return sys._getframe() + + proxy = FrameLocalsProxy(make_frame()) + self.assertEqual(proxy, {'x': 1, 'y': 2}) + + # constructor expects 1 frame argument + with self.assertRaises(TypeError): + FrameLocalsProxy() # no arguments + with self.assertRaises(TypeError): + FrameLocalsProxy(123) # wrong type + with self.assertRaises(TypeError): + FrameLocalsProxy(frame=sys._getframe()) # no keyword arguments + class FrameLocalsProxyMappingTests(mapping_tests.TestHashMappingProtocol): """Test that FrameLocalsProxy behaves like a Mapping (with exceptions)""" |