From bcb1d0c76d6e665133d1f878590af2006b31de6e Mon Sep 17 00:00:00 2001 From: Ron Yorston Date: Wed, 22 Sep 2021 10:18:42 +0100 Subject: ash: fix FUNCNAME issue Commit c13f77823 (ash: adjust reinitvar() to allow for FUNCNAME) was incomplete. It didn't correctly pass the funcname variable during forkshell. This resulted in horrible failure when running a function like: f() { (echo $FUNCNAME); } --- shell/ash.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'shell') diff --git a/shell/ash.c b/shell/ash.c index 613bb97a0..fafbeb86e 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -16292,6 +16292,7 @@ redirtab_copy(struct redirtab *rdtp) return start; } +#undef funcname #undef shellparam #undef redirlist #undef vartab @@ -16301,6 +16302,7 @@ globals_var_size(struct datasize ds, struct globals_var *gvp) int i; ds.funcblocksize += sizeof(struct globals_var); + ds.funcstringsize += align_len(gvp->funcname); ds = argv_size(ds, gvp->shellparam.p); ds.funcblocksize = redirtab_size(ds.funcblocksize, gvp->redirlist); for (i = 0; i < VTABSIZE; i++) @@ -16318,6 +16320,9 @@ globals_var_copy(struct globals_var *gvp) funcblock = (char *) funcblock + sizeof(struct globals_var); memcpy(new, gvp, sizeof(struct globals_var)); + new->funcname = nodeckstrdup(gvp->funcname); + SAVE_PTR(new->funcname, xasprintf("funcname '%s'", gvp->funcname ?: "NULL"), FREE); + /* shparam */ new->shellparam.malloced = 0; new->shellparam.p = argv_copy(gvp->shellparam.p); -- cgit v1.2.3-55-g6feb