https://github.com/python/cpython/commit/5e61a16c1058e5de66b71dfdc9720d40e9f515d9
commit: 5e61a16c1058e5de66b71dfdc9720d40e9f515d9
branch: main
author: Stan Ulbrych <[email protected]>
committer: gpshead <[email protected]>
date: 2026-02-24T12:44:57-08:00
summary:
gh-145187: Fix crash on invalid type parameter bound expression in conditional
block (GH-145188)
Fix parsing crash found by oss-fuzz
files:
A
Misc/NEWS.d/next/Core_and_Builtins/2026-02-24-18-30-56.gh-issue-145187.YjPu1Z.rst
M Lib/test/test_type_params.py
M Python/codegen.c
diff --git a/Lib/test/test_type_params.py b/Lib/test/test_type_params.py
index 0f393def827271..84c1b954136736 100644
--- a/Lib/test/test_type_params.py
+++ b/Lib/test/test_type_params.py
@@ -152,6 +152,13 @@ def test_incorrect_mro_explicit_object(self):
with self.assertRaisesRegex(TypeError, r"\(MRO\) for bases object,
Generic"):
class My[X](object): ...
+ def test_compile_error_in_type_param_bound(self):
+ # This should not crash, see gh-145187
+ check_syntax_error(
+ self,
+ "if True:\n class h[l:{7for*()in 0}]:2"
+ )
+
class TypeParamsNonlocalTest(unittest.TestCase):
def test_nonlocal_disallowed_01(self):
diff --git
a/Misc/NEWS.d/next/Core_and_Builtins/2026-02-24-18-30-56.gh-issue-145187.YjPu1Z.rst
b/Misc/NEWS.d/next/Core_and_Builtins/2026-02-24-18-30-56.gh-issue-145187.YjPu1Z.rst
new file mode 100644
index 00000000000000..08c6b44164ebc3
--- /dev/null
+++
b/Misc/NEWS.d/next/Core_and_Builtins/2026-02-24-18-30-56.gh-issue-145187.YjPu1Z.rst
@@ -0,0 +1,2 @@
+Fix compiler assertion fail when a type parameter bound contains an invalid
+expression in a conditional block.
diff --git a/Python/codegen.c b/Python/codegen.c
index 42fccb07d31dba..5749b615386717 100644
--- a/Python/codegen.c
+++ b/Python/codegen.c
@@ -1244,11 +1244,11 @@ codegen_type_param_bound_or_default(compiler *c,
expr_ty e,
ADDOP_LOAD_CONST_NEW(c, LOC(e), defaults);
RETURN_IF_ERROR(codegen_setup_annotations_scope(c, LOC(e), key, name));
if (allow_starred && e->kind == Starred_kind) {
- VISIT(c, expr, e->v.Starred.value);
- ADDOP_I(c, LOC(e), UNPACK_SEQUENCE, (Py_ssize_t)1);
+ VISIT_IN_SCOPE(c, expr, e->v.Starred.value);
+ ADDOP_I_IN_SCOPE(c, LOC(e), UNPACK_SEQUENCE, (Py_ssize_t)1);
}
else {
- VISIT(c, expr, e);
+ VISIT_IN_SCOPE(c, expr, e);
}
ADDOP_IN_SCOPE(c, LOC(e), RETURN_VALUE);
PyCodeObject *co = _PyCompile_OptimizeAndAssemble(c, 1);
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]