summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2024-09-25 19:41:09 (GMT)
committerGitHub <noreply@github.com>2024-09-25 19:41:09 (GMT)
commitd6954b6421aa34afd280df9c44ded21a2348a6ea (patch)
treea8bef4710328a6373712d618274459ab73153b6a /Lib
parent0d9d56c4e4246495f506f7fb319548fb105b535b (diff)
downloadcpython-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.py21
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)"""