mirror of https://github.com/python/cpython
gh-109341: Fix crash on compiling invalid AST including TypeAlias (#109349)
This commit is contained in:
parent
79101edb03
commit
987b4bc087
|
@ -505,6 +505,26 @@ class TestSpecifics(unittest.TestCase):
|
|||
ast.body = [_ast.BoolOp()]
|
||||
self.assertRaises(TypeError, compile, ast, '<ast>', 'exec')
|
||||
|
||||
def test_compile_invalid_typealias(self):
|
||||
# gh-109341
|
||||
m = ast.Module(
|
||||
body=[
|
||||
ast.TypeAlias(
|
||||
name=ast.Subscript(
|
||||
value=ast.Name(id="foo", ctx=ast.Load()),
|
||||
slice=ast.Constant(value="x"),
|
||||
ctx=ast.Store(),
|
||||
),
|
||||
type_params=[],
|
||||
value=ast.Name(id="Callable", ctx=ast.Load()),
|
||||
)
|
||||
],
|
||||
type_ignores=[],
|
||||
)
|
||||
|
||||
with self.assertRaisesRegex(TypeError, "TypeAlias with non-Name name"):
|
||||
compile(ast.fix_missing_locations(m), "<file>", "exec")
|
||||
|
||||
def test_dict_evaluation_order(self):
|
||||
i = 0
|
||||
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Fix crash when compiling an invalid AST involving a :class:`ast.TypeAlias`.
|
|
@ -773,6 +773,11 @@ validate_stmt(struct validator *state, stmt_ty stmt)
|
|||
validate_expr(state, stmt->v.AnnAssign.annotation, Load);
|
||||
break;
|
||||
case TypeAlias_kind:
|
||||
if (stmt->v.TypeAlias.name->kind != Name_kind) {
|
||||
PyErr_SetString(PyExc_TypeError,
|
||||
"TypeAlias with non-Name name");
|
||||
return 0;
|
||||
}
|
||||
ret = validate_expr(state, stmt->v.TypeAlias.name, Store) &&
|
||||
validate_type_params(state, stmt->v.TypeAlias.type_params) &&
|
||||
validate_expr(state, stmt->v.TypeAlias.value, Load);
|
||||
|
|
Loading…
Reference in New Issue