summaryrefslogtreecommitdiff
path: root/trap.c
diff options
context:
space:
mode:
authorChet Ramey <chet.ramey@case.edu>2016-08-22 15:58:43 -0400
committerChet Ramey <chet.ramey@case.edu>2016-08-22 15:58:43 -0400
commit955543877583837c85470f7fb8a97b7aa8d45e6c (patch)
treeb239e7c3983a9189b8f0104854ee82283c5807ab /trap.c
parenta4eef1991c25c9d1c55f777952cd522c762c6fc3 (diff)
downloadbash-4.4-testing.tar.gz
bash-4.4-rc2 releasebash-4.4-rc2bash-4.4-testing
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;