mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	check the return value of NEW_IDENTIFIER in some more places
This commit is contained in:
		
							parent
							
								
									45dea65b39
								
							
						
					
					
						commit
						d951e7b389
					
				
					 1 changed files with 18 additions and 9 deletions
				
			
		
							
								
								
									
										21
									
								
								Python/ast.c
									
										
									
									
									
								
							
							
						
						
									
										21
									
								
								Python/ast.c
									
										
									
									
									
								
							| 
						 | 
					@ -654,6 +654,7 @@ static int
 | 
				
			||||||
handle_keywordonly_args(struct compiling *c, const node *n, int start,
 | 
					handle_keywordonly_args(struct compiling *c, const node *n, int start,
 | 
				
			||||||
                        asdl_seq *kwonlyargs, asdl_seq *kwdefaults)
 | 
					                        asdl_seq *kwonlyargs, asdl_seq *kwdefaults)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    PyObject *argname;
 | 
				
			||||||
    node *ch;
 | 
					    node *ch;
 | 
				
			||||||
    expr_ty expression, annotation;
 | 
					    expr_ty expression, annotation;
 | 
				
			||||||
    arg_ty arg;
 | 
					    arg_ty arg;
 | 
				
			||||||
| 
						 | 
					@ -690,11 +691,12 @@ handle_keywordonly_args(struct compiling *c, const node *n, int start,
 | 
				
			||||||
                    annotation = NULL;
 | 
					                    annotation = NULL;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                ch = CHILD(ch, 0);
 | 
					                ch = CHILD(ch, 0);
 | 
				
			||||||
                arg = arg(NEW_IDENTIFIER(ch), annotation, c->c_arena);
 | 
					                argname = NEW_IDENTIFIER(ch);
 | 
				
			||||||
                if (!arg) {
 | 
					                if (!argname)
 | 
				
			||||||
                    ast_error(ch, "expecting name");
 | 
					                    goto error;
 | 
				
			||||||
 | 
					                arg = arg(argname, annotation, c->c_arena);
 | 
				
			||||||
 | 
					                if (!arg)
 | 
				
			||||||
                    goto error;
 | 
					                    goto error;
 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                asdl_seq_SET(kwonlyargs, j++, arg);
 | 
					                asdl_seq_SET(kwonlyargs, j++, arg);
 | 
				
			||||||
                i += 2; /* the name and the comma */
 | 
					                i += 2; /* the name and the comma */
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
| 
						 | 
					@ -3000,7 +3002,7 @@ ast_for_classdef(struct compiling *c, const node *n, asdl_seq *decorator_seq)
 | 
				
			||||||
    /* classdef: 'class' NAME ['(' arglist ')'] ':' suite */
 | 
					    /* classdef: 'class' NAME ['(' arglist ')'] ':' suite */
 | 
				
			||||||
    PyObject *classname;
 | 
					    PyObject *classname;
 | 
				
			||||||
    asdl_seq *s;
 | 
					    asdl_seq *s;
 | 
				
			||||||
    expr_ty call, dummy;
 | 
					    expr_ty call;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    REQ(n, classdef);
 | 
					    REQ(n, classdef);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3028,10 +3030,17 @@ ast_for_classdef(struct compiling *c, const node *n, asdl_seq *decorator_seq)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* class NAME '(' arglist ')' ':' suite */
 | 
					    /* class NAME '(' arglist ')' ':' suite */
 | 
				
			||||||
    /* build up a fake Call node so we can extract its pieces */
 | 
					    /* build up a fake Call node so we can extract its pieces */
 | 
				
			||||||
    dummy = Name(NEW_IDENTIFIER(CHILD(n, 1)), Load, LINENO(n), n->n_col_offset, c->c_arena);
 | 
					    {
 | 
				
			||||||
 | 
					        PyObject *dummy_name;
 | 
				
			||||||
 | 
					        expr_ty dummy;
 | 
				
			||||||
 | 
					        dummy_name = NEW_IDENTIFIER(CHILD(n, 1));
 | 
				
			||||||
 | 
					        if (!dummy_name)
 | 
				
			||||||
 | 
					            return NULL;
 | 
				
			||||||
 | 
					        dummy = Name(dummy_name, Load, LINENO(n), n->n_col_offset, c->c_arena);
 | 
				
			||||||
        call = ast_for_call(c, CHILD(n, 3), dummy);
 | 
					        call = ast_for_call(c, CHILD(n, 3), dummy);
 | 
				
			||||||
        if (!call)
 | 
					        if (!call)
 | 
				
			||||||
            return NULL;
 | 
					            return NULL;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    s = ast_for_suite(c, CHILD(n, 6));
 | 
					    s = ast_for_suite(c, CHILD(n, 6));
 | 
				
			||||||
    if (!s)
 | 
					    if (!s)
 | 
				
			||||||
        return NULL;
 | 
					        return NULL;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue