From: Denys Vlasenko Date: Thu, 24 Sep 2009 01:09:26 +0000 (+0200) Subject: ash: do not let EXIT trap to fire in `trap` X-Git-Tag: 1_16_0~458 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=0800e3af75461c6322427dab53d3526066453b04;p=oweals%2Fbusybox.git ash: do not let EXIT trap to fire in `trap` Signed-off-by: Denys Vlasenko --- diff --git a/shell/ash.c b/shell/ash.c index 597bc2808..47f968b54 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -4525,7 +4525,7 @@ clear_traps(void) INT_OFF; free(*tp); *tp = NULL; - if (tp != &trap[0]) + if ((tp - trap) != 0) setsignal(tp - trap); INT_ON; } @@ -4596,6 +4596,8 @@ forkchild(struct job *jp, union node *n, int mode) * * Our solution: ONLY bare $(trap) or `trap` is special. */ + free(trap[0]); /* Prevent EXIT trap from firing in `trap` */ + trap[0] = NULL; } else { clear_traps(); } @@ -13023,6 +13025,7 @@ exitshell(void) if (p) { trap[0] = NULL; evalstring(p, 0); + free(p); } flush_stdout_stderr(); out: