123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- BASH PATCH REPORT
- =================
- Bash-Release: 3.2
- Patch-ID: bash32-020
- Bug-Reported-by: Ian A Watson <WATSON_IAN_A@LILLY.COM>
- Bug-Reference-ID: <OFEC551808.69D02C7F-ON8525729A.0045708D-8525729A.0046150B@EliLilly.lilly.com>
- Bug-Reference-URL:
- Bug-Description:
- In some cases of error processing, a jump back to the top-level processing
- loop from a builtin command would leave the shell in an inconsistent state.
- Patch:
- *** ../bash-3.2-patched/sig.c Wed Jan 25 14:57:59 2006
- --- bash-3.2/sig.c Sat Mar 10 11:11:30 2007
- ***************
- *** 351,354 ****
- --- 351,373 ----
- #undef XHANDLER
-
- + /* Run some of the cleanups that should be performed when we run
- + jump_to_top_level from a builtin command context. XXX - might want to
- + also call reset_parser here. */
- + void
- + top_level_cleanup ()
- + {
- + /* Clean up string parser environment. */
- + while (parse_and_execute_level)
- + parse_and_execute_cleanup ();
- +
- + #if defined (PROCESS_SUBSTITUTION)
- + unlink_fifo_list ();
- + #endif /* PROCESS_SUBSTITUTION */
- +
- + run_unwind_protects ();
- + loop_level = continuing = breaking = 0;
- + return_catch_flag = 0;
- + }
- +
- /* What to do when we've been interrupted, and it is safe to handle it. */
- void
- *** ../bash-3.2-patched/sig.h Wed Jan 25 14:50:27 2006
- --- bash-3.2/sig.h Sat Mar 10 11:14:18 2007
- ***************
- *** 122,125 ****
- --- 122,126 ----
- extern void initialize_terminating_signals __P((void));
- extern void reset_terminating_signals __P((void));
- + extern void top_level_cleanup __P((void));
- extern void throw_to_top_level __P((void));
- extern void jump_to_top_level __P((int)) __attribute__((__noreturn__));
- *** ../bash-3.2-patched/builtins/common.c Tue Apr 3 16:47:13 2007
- --- bash-3.2/builtins/common.c Mon Apr 30 15:01:33 2007
- ***************
- *** 132,135 ****
- --- 132,136 ----
- {
- builtin_error (_("too many arguments"));
- + top_level_cleanup ();
- jump_to_top_level (DISCARD);
- }
- ***************
- *** 396,400 ****
- throw_to_top_level ();
- else
- ! jump_to_top_level (DISCARD);
- }
- no_args (list->next);
- --- 410,417 ----
- throw_to_top_level ();
- else
- ! {
- ! top_level_cleanup ();
- ! jump_to_top_level (DISCARD);
- ! }
- }
- no_args (list->next);
- *** ../bash-3.2-patched/subst.c Tue Apr 3 16:47:19 2007
- --- bash-3.2/subst.c Tue Jul 17 09:45:11 2007
- ***************
- *** 1279,1283 ****
- if (no_longjmp_on_fatal_error == 0)
- { /* { */
- ! report_error ("bad substitution: no closing `%s' in %s", "}", string);
- last_command_exit_value = EXECUTION_FAILURE;
- exp_jump_to_top_level (DISCARD);
- --- 1290,1294 ----
- if (no_longjmp_on_fatal_error == 0)
- { /* { */
- ! report_error (_("bad substitution: no closing `%s' in %s"), "}", string);
- last_command_exit_value = EXECUTION_FAILURE;
- exp_jump_to_top_level (DISCARD);
- ***************
- *** 7662,7665 ****
- --- 7706,7711 ----
- expand_no_split_dollar_star = 0; /* XXX */
- expanding_redir = 0;
- +
- + top_level_cleanup (); /* from sig.c */
-
- jump_to_top_level (v);
- ***************
- *** 7880,7884 ****
- {
- report_error (_("no match: %s"), tlist->word->word);
- ! jump_to_top_level (DISCARD);
- }
- else if (allow_null_glob_expansion == 0)
- --- 7927,7931 ----
- {
- report_error (_("no match: %s"), tlist->word->word);
- ! exp_jump_to_top_level (DISCARD);
- }
- else if (allow_null_glob_expansion == 0)
- *** ../bash-3.2-patched/arrayfunc.c Thu Jul 27 09:37:59 2006
- --- bash-3.2/arrayfunc.c Thu May 31 11:55:46 2007
- ***************
- *** 619,622 ****
- --- 619,624 ----
- {
- last_command_exit_value = EXECUTION_FAILURE;
- +
- + top_level_cleanup ();
- jump_to_top_level (DISCARD);
- }
- *** ../bash-3.2-patched/expr.c Wed Dec 28 17:47:03 2005
- --- bash-3.2/expr.c Tue Apr 24 14:17:59 2007
- ***************
- *** 930,933 ****
- --- 930,934 ----
- {
- expr_unwind ();
- + top_level_cleanup ();
- jump_to_top_level (DISCARD);
- }
- *** ../bash-3.2-patched/variables.c Fri Sep 8 13:33:32 2006
- --- bash-3.2/variables.c Tue Jul 17 09:54:59 2007
- ***************
- *** 1822,1830 ****
- lval = evalexp (oval, &expok); /* ksh93 seems to do this */
- if (expok == 0)
- ! jump_to_top_level (DISCARD);
- }
- rval = evalexp (value, &expok);
- if (expok == 0)
- ! jump_to_top_level (DISCARD);
- if (flags & ASS_APPEND)
- rval += lval;
- --- 1855,1869 ----
- lval = evalexp (oval, &expok); /* ksh93 seems to do this */
- if (expok == 0)
- ! {
- ! top_level_cleanup ();
- ! jump_to_top_level (DISCARD);
- ! }
- }
- rval = evalexp (value, &expok);
- if (expok == 0)
- ! {
- ! top_level_cleanup ();
- ! jump_to_top_level (DISCARD);
- ! }
- if (flags & ASS_APPEND)
- rval += lval;
- *** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006
- --- bash-3.2/patchlevel.h Mon Oct 16 14:22:54 2006
- ***************
- *** 26,30 ****
- looks for to find the patch level (for the sccs version string). */
-
- ! #define PATCHLEVEL 19
-
- #endif /* _PATCHLEVEL_H_ */
- --- 26,30 ----
- looks for to find the patch level (for the sccs version string). */
-
- ! #define PATCHLEVEL 20
-
- #endif /* _PATCHLEVEL_H_ */
|