From b1aa47dcc0d8b5a16730cb3d0e78c475f2890d41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20H=C3=BCbinette=20=28Hubbe=29?= <hubbe@hubbe.net> Date: Fri, 5 Oct 2001 15:55:33 -0700 Subject: [PATCH] fixed an index bounds bug Rev: src/docode.c:1.136 Rev: src/language.yacc:1.263 --- src/docode.c | 10 ++++++---- src/language.yacc | 15 +++++++++------ 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/docode.c b/src/docode.c index 0953ae9f12..c0be94aeac 100644 --- a/src/docode.c +++ b/src/docode.c @@ -5,7 +5,7 @@ \*/ /**/ #include "global.h" -RCSID("$Id: docode.c,v 1.135 2001/09/29 08:47:03 hubbe Exp $"); +RCSID("$Id: docode.c,v 1.136 2001/10/05 22:55:32 hubbe Exp $"); #include "las.h" #include "program.h" #include "pike_types.h" @@ -2188,9 +2188,11 @@ INT32 do_code_block(node *n) emit0(F_ENTRY); emit0(F_START_FUNCTION); low_insert_label(0); - if(Pike_compiler->new_program->identifier_references[Pike_compiler->compiler_frame-> - current_function_number].id_flags & - ID_INLINE) + + if(Pike_compiler->compiler_frame->current_function_number >= 0 && + (Pike_compiler->new_program->identifier_references[ + Pike_compiler->compiler_frame->current_function_number].id_flags & + ID_INLINE)) { Pike_compiler->compiler_frame->recur_label=0; Pike_compiler->compiler_frame->is_inline=1; diff --git a/src/language.yacc b/src/language.yacc index 6228eff5c4..2b6f236cf7 100644 --- a/src/language.yacc +++ b/src/language.yacc @@ -112,7 +112,7 @@ /* This is the grammar definition of Pike. */ #include "global.h" -RCSID("$Id: language.yacc,v 1.262 2001/09/29 06:19:27 hubbe Exp $"); +RCSID("$Id: language.yacc,v 1.263 2001/10/05 22:55:33 hubbe Exp $"); #ifdef HAVE_MEMORY_H #include <memory.h> #endif @@ -1816,7 +1816,7 @@ lambda: TOK_LAMBDA push_compiler_frame1 failsafe_block { struct pike_type *type; - char buf[40]; + char buf[80]; int f,e; struct pike_string *name; int save_line = lex.current_line; @@ -1865,7 +1865,8 @@ lambda: TOK_LAMBDA push_compiler_frame1 fprintf(stderr, "%d: LAMBDA: %s 0x%08lx 0x%08lx\n", Pike_compiler->compiler_pass, buf, (long)Pike_compiler->new_program->id, Pike_compiler->local_class_counter-1); #endif /* LAMBDA_DEBUG */ - + if(Pike_compiler->compiler_pass == 2) + Pike_compiler->compiler_frame->current_function_number=isidentifier(name); f=dooptcode(name, $6, type, @@ -1949,11 +1950,12 @@ local_function: TOK_IDENTIFIER push_compiler_frame1 func_args }else{ id=define_function(name, type, - 0, + ID_INLINE, IDENTIFIER_PIKE_FUNCTION, 0, OPT_SIDE_EFFECT|OPT_EXTERNAL_DEPEND); } + Pike_compiler->compiler_frame->current_function_number=id; n=0; if(Pike_compiler->compiler_pass > 1 && (i=ID_FROM_INT(Pike_compiler->new_program, id))) @@ -2092,11 +2094,12 @@ local_function2: optional_stars TOK_IDENTIFIER push_compiler_frame1 func_args }else{ id=define_function(name, type, - 0, + ID_INLINE, IDENTIFIER_PIKE_FUNCTION, 0, OPT_SIDE_EFFECT|OPT_EXTERNAL_DEPEND); } + Pike_compiler->compiler_frame->current_function_number=id; n=0; if(Pike_compiler->compiler_pass > 1 && (i=ID_FROM_INT(Pike_compiler->new_program, id))) @@ -2263,7 +2266,7 @@ optional_create_arguments: /* empty */ { $$ = 0; } Pike_compiler->compiler_frame->current_function_number= define_function(create_string, type, - ID_STATIC, IDENTIFIER_PIKE_FUNCTION, 0, + ID_INLINE | ID_STATIC, IDENTIFIER_PIKE_FUNCTION, 0, OPT_SIDE_EFFECT); /* Third: Generate the initialization code. -- GitLab