@@ -710,6 +710,23 @@ _validate_nonempty_seq(asdl_seq *seq, const char *what, const char *owner)
710710}
711711#define validate_nonempty_seq (seq , what , owner ) _validate_nonempty_seq((asdl_seq*)seq, what, owner)
712712
713+ static int
714+ validate_import_names (asdl_alias_seq * seq , const char * what , const char * owner )
715+ {
716+ if (!validate_nonempty_seq (seq , what , owner )) {
717+ return 0 ;
718+ }
719+ Py_ssize_t n = asdl_seq_LEN (seq );
720+ for (Py_ssize_t i = 0 ; i < n ; i ++ ) {
721+ alias_ty alias = asdl_seq_GET (seq , i );
722+ if (!validate_name (alias -> name ) ||
723+ (alias -> asname && !validate_name (alias -> asname ))) {
724+ return 0 ;
725+ }
726+ }
727+ return 1 ;
728+ }
729+
713730static int
714731validate_assignlist (asdl_expr_seq * targets , expr_context_ty ctx )
715732{
@@ -735,6 +752,7 @@ validate_stmt(stmt_ty stmt)
735752 switch (stmt -> kind ) {
736753 case FunctionDef_kind :
737754 ret = validate_body (stmt -> v .FunctionDef .body , "FunctionDef" ) &&
755+ validate_name (stmt -> v .FunctionDef .name ) &&
738756 validate_type_params (stmt -> v .FunctionDef .type_params ) &&
739757 validate_arguments (stmt -> v .FunctionDef .args ) &&
740758 validate_exprs (stmt -> v .FunctionDef .decorator_list , Load , 0 ) &&
@@ -743,6 +761,7 @@ validate_stmt(stmt_ty stmt)
743761 break ;
744762 case ClassDef_kind :
745763 ret = validate_body (stmt -> v .ClassDef .body , "ClassDef" ) &&
764+ validate_name (stmt -> v .ClassDef .name ) &&
746765 validate_type_params (stmt -> v .ClassDef .type_params ) &&
747766 validate_exprs (stmt -> v .ClassDef .bases , Load , 0 ) &&
748767 validate_keywords (stmt -> v .ClassDef .keywords ) &&
@@ -873,6 +892,8 @@ validate_stmt(stmt_ty stmt)
873892 VALIDATE_POSITIONS (handler );
874893 if ((handler -> v .ExceptHandler .type &&
875894 !validate_expr (handler -> v .ExceptHandler .type , Load )) ||
895+ (handler -> v .ExceptHandler .name &&
896+ !validate_name (handler -> v .ExceptHandler .name )) ||
876897 !validate_body (handler -> v .ExceptHandler .body , "ExceptHandler" ))
877898 return 0 ;
878899 }
@@ -911,14 +932,14 @@ validate_stmt(stmt_ty stmt)
911932 (!stmt -> v .Assert .msg || validate_expr (stmt -> v .Assert .msg , Load ));
912933 break ;
913934 case Import_kind :
914- ret = validate_nonempty_seq (stmt -> v .Import .names , "names" , "Import" );
935+ ret = validate_import_names (stmt -> v .Import .names , "names" , "Import" );
915936 break ;
916937 case ImportFrom_kind :
917938 if (stmt -> v .ImportFrom .level < 0 ) {
918939 PyErr_SetString (PyExc_ValueError , "Negative ImportFrom level" );
919940 return 0 ;
920941 }
921- ret = validate_nonempty_seq (stmt -> v .ImportFrom .names , "names" , "ImportFrom" );
942+ ret = validate_import_names (stmt -> v .ImportFrom .names , "names" , "ImportFrom" );
922943 break ;
923944 case Global_kind :
924945 ret = validate_nonempty_seq (stmt -> v .Global .names , "names" , "Global" );
@@ -931,6 +952,7 @@ validate_stmt(stmt_ty stmt)
931952 break ;
932953 case AsyncFunctionDef_kind :
933954 ret = validate_body (stmt -> v .AsyncFunctionDef .body , "AsyncFunctionDef" ) &&
955+ validate_name (stmt -> v .AsyncFunctionDef .name ) &&
934956 validate_type_params (stmt -> v .AsyncFunctionDef .type_params ) &&
935957 validate_arguments (stmt -> v .AsyncFunctionDef .args ) &&
936958 validate_exprs (stmt -> v .AsyncFunctionDef .decorator_list , Load , 0 ) &&
0 commit comments