summaryrefslogtreecommitdiff
path: root/trap.c
diff options
context:
space:
mode:
Diffstat (limited to 'trap.c')
-rw-r--r--trap.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/trap.c b/trap.c
index 23ba314a..eb8ecf3a 100644
--- a/trap.c
+++ b/trap.c
@@ -286,6 +286,7 @@ run_pending_traps ()
register int sig;
int old_exit_value, x;
WORD_LIST *save_subst_varlist;
+ HASH_TABLE *save_tempenv;
sh_parser_state_t pstate;
#if defined (ARRAY_VARS)
ARRAY *ps;
@@ -397,6 +398,8 @@ run_pending_traps ()
save_parser_state (&pstate);
save_subst_varlist = subst_assign_varlist;
subst_assign_varlist = 0;
+ save_tempenv = temporary_env;
+ temporary_env = 0; /* traps should not run with temporary env */
#if defined (JOB_CONTROL)
save_pipeline (1); /* XXX only provides one save level */
@@ -410,6 +413,7 @@ run_pending_traps ()
subst_assign_varlist = save_subst_varlist;
restore_parser_state (&pstate);
+ temporary_env = save_tempenv;
}
pending_traps[sig] = 0; /* XXX - move before evalstring? */
@@ -941,6 +945,7 @@ _run_trap_internal (sig, tag)
int flags;
procenv_t save_return_catch;
WORD_LIST *save_subst_varlist;
+ HASH_TABLE *save_tempenv;
sh_parser_state_t pstate;
#if defined (ARRAY_VARS)
ARRAY *ps;
@@ -977,6 +982,8 @@ _run_trap_internal (sig, tag)
save_parser_state (&pstate);
save_subst_varlist = subst_assign_varlist;
subst_assign_varlist = 0;
+ save_tempenv = temporary_env;
+ temporary_env = 0; /* traps should not run with temporary env */
#if defined (JOB_CONTROL)
if (sig != DEBUG_TRAP) /* run_debug_trap does this */
@@ -1014,6 +1021,8 @@ _run_trap_internal (sig, tag)
restore_pipestatus_array (ps);
#endif
+ temporary_env = save_tempenv;
+
sigmodes[sig] &= ~SIG_INPROGRESS;
running_trap = 0;
interrupt_state = old_int;