From 01f9142102feb6c36fa43b09f76895b236bac9fb Mon Sep 17 00:00:00 2001
From: Arne Goedeke <el@laramies.com>
Date: Thu, 1 Aug 2013 17:19:21 +0200
Subject: [PATCH] initialize pike_frame->num_args even in special cases

---
 src/builtin.cmod | 7 ++++++-
 src/object.c     | 1 +
 src/program.c    | 1 +
 3 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/builtin.cmod b/src/builtin.cmod
index 1eb0fa46f6..580b251992 100644
--- a/src/builtin.cmod
+++ b/src/builtin.cmod
@@ -2807,7 +2807,12 @@ void low_backtrace(struct Pike_interpreter_struct *i)
 
       if(of && of->locals) {
 	/* f->num_args can be too large, so this is necessary for some
-	 * reason. I don't know why. /mast */
+	 * reason. I don't know why. /mast
+	 *
+	 * possibly because f->num_args was uninitialized for c_initializers
+	 *  /arne
+	 * */
+
 	numargs = DO_NOT_WARN((INT32)MINIMUM(f->num_args,of->locals - f->locals));
       }
 
diff --git a/src/object.c b/src/object.c
index 1f0c30f4a6..089bb895a5 100644
--- a/src/object.c
+++ b/src/object.c
@@ -265,6 +265,7 @@ PMOD_EXPORT void call_c_initializers(struct object *o)
       if( !frame_pushed )
       {
 	PUSH_FRAME2(o, p);
+	Pike_fp->num_args = 0;
 	frame_pushed = 1;
       }
       SET_FRAME_CONTEXT(p->inherits + e);
diff --git a/src/program.c b/src/program.c
index ffac06ea9b..20f9626271 100644
--- a/src/program.c
+++ b/src/program.c
@@ -9967,6 +9967,7 @@ static void low_enter_compiler(struct object *ce, int inherit)
   new_frame->save_mark_sp = Pike_mark_sp;
   new_frame->mark_sp_base = Pike_mark_sp;
   new_frame->args = 0;
+  new_frame->num_args = 0;
   new_frame->num_locals = 0;
   new_frame->pc = 0;
   new_frame->return_addr = 0;
-- 
GitLab