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