[Python-checkins] gh-100077: make test_code.test_invalid_bytecode more robust and maintainable (#100078)

iritkatriel webhook-mailer at python.org
Wed Dec 7 13:09:34 EST 2022


https://github.com/python/cpython/commit/f3e97c90ed6f82fce67b0e8757eec54908ba49ce
commit: f3e97c90ed6f82fce67b0e8757eec54908ba49ce
branch: main
author: Irit Katriel <1055913+iritkatriel at users.noreply.github.com>
committer: iritkatriel <1055913+iritkatriel at users.noreply.github.com>
date: 2022-12-07T18:09:05Z
summary:

gh-100077: make test_code.test_invalid_bytecode more robust and maintainable (#100078)

files:
M Lib/test/test_code.py

diff --git a/Lib/test/test_code.py b/Lib/test/test_code.py
index 4e4d82314a9f..02ab8fbcdb07 100644
--- a/Lib/test/test_code.py
+++ b/Lib/test/test_code.py
@@ -143,7 +143,7 @@
                           gc_collect)
 from test.support.script_helper import assert_python_ok
 from test.support import threading_helper
-from opcode import opmap
+from opcode import opmap, opname
 COPY_FREE_VARS = opmap['COPY_FREE_VARS']
 
 
@@ -339,15 +339,19 @@ def func():
         self.assertEqual(list(new_code.co_lines()), [])
 
     def test_invalid_bytecode(self):
-        def foo(): pass
-        foo.__code__ = co = foo.__code__.replace(co_code=b'\xee\x00d\x00S\x00')
+        def foo():
+            pass
 
-        with self.assertRaises(SystemError) as se:
-            foo()
-        self.assertEqual(
-            f"{co.co_filename}:{co.co_firstlineno}: unknown opcode 238",
-            str(se.exception))
+        # assert that opcode 238 is invalid
+        self.assertEqual(opname[238], '<238>')
 
+        # change first opcode to 0xee (=238)
+        foo.__code__ = foo.__code__.replace(
+            co_code=b'\xee' + foo.__code__.co_code[1:])
+
+        msg = f"unknown opcode 238"
+        with self.assertRaisesRegex(SystemError, msg):
+            foo()
 
     @requires_debug_ranges()
     def test_co_positions_artificial_instructions(self):



More information about the Python-checkins mailing list