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