From c56fe78f8fb777c23d40fba421497e90281f8ee3 Mon Sep 17 00:00:00 2001 From: "Dr. Werner Fink" Date: Wed, 9 Mar 2011 11:02:20 +0000 Subject: [PATCH] . OBS-URL: https://build.opensuse.org/package/show/Base:System/bash?expand=0&rev=67 --- bash-4.2-history-myown.dif.bz2 | 3 + bash-4.2-history.dif | 157 +++++++-------------------------- bash.changes | 7 ++ bash.spec | 5 ++ 4 files changed, 49 insertions(+), 123 deletions(-) create mode 100644 bash-4.2-history-myown.dif.bz2 diff --git a/bash-4.2-history-myown.dif.bz2 b/bash-4.2-history-myown.dif.bz2 new file mode 100644 index 00000000..1c4387b4 --- /dev/null +++ b/bash-4.2-history-myown.dif.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa4a4ed4826da29c544795520dc106935ee91f605e1eadf1a05dad7dde06087e +size 1468 diff --git a/bash-4.2-history.dif b/bash-4.2-history.dif index dd0583f7..f6922772 100644 --- a/bash-4.2-history.dif +++ b/bash-4.2-history.dif @@ -1,123 +1,34 @@ ---- shell.c -+++ shell.c 2011-03-08 17:25:55.160426342 +0000 -@@ -261,6 +261,11 @@ static const struct { - { (char *)0x0, Int, (int *)0x0, (char **)0x0 } - }; - -+#if defined (HAVE_POSIX_SIGSETJMP) -+volatile procenv_t terminating_now; -+volatile sig_atomic_t jump_with_sig; -+#endif /* HAVE_POSIX_SIGSETJMP */ -+ - /* These are extern so execute_simple_command can set them, and then - longjmp back to main to execute a shell script, instead of calling - main () again and resulting in indefinite, possibly fatal, stack -@@ -379,6 +384,39 @@ main (argc, argv, env) - if (code) - exit (2); - -+#if defined (HAVE_POSIX_SIGSETJMP) -+ /* Catch signals here */ -+ if (sigsetjmp (terminating_now, 1)) -+ { -+ int sig = jump_with_sig; -+ -+ /* I don't believe this condition ever tests true. */ -+ if (sig == SIGINT && signal_is_trapped (SIGINT)) -+ run_interrupt_trap (); -+ -+# if defined (HISTORY) -+ if (interactive_shell && sig != SIGABRT) -+ maybe_save_shell_history (); -+# endif /* HISTORY */ -+ -+# if defined (JOB_CONTROL) -+ if (sig == SIGHUP && (interactive || (subshell_environment & (SUBSHELL_COMSUB|SUBSHELL_PROCSUB)))) -+ hangup_all_jobs (); -+ end_job_control (); -+# endif /* JOB_CONTROL */ -+ -+# if defined (PROCESS_SUBSTITUTION) -+ unlink_fifo_list (); -+# endif /* PROCESS_SUBSTITUTION */ -+ -+ run_exit_trap (); -+ set_signal_handler (sig, SIG_DFL); -+ kill (getpid (), sig); -+ _exit(0); -+ } -+ jump_with_sig = 0; -+#endif /* HAVE_POSIX_SIGSETJMP */ -+ - xtrace_init (); - - #if defined (USING_BASH_MALLOC) && defined (DEBUG) && !defined (DISABLE_MALLOC_WRAPPERS) ---- sig.c -+++ sig.c 2011-03-08 17:26:31.627928783 +0000 -@@ -503,7 +503,7 @@ termsig_sighandler (sig) - /* XXX - should this also trigger when interrupt_immediately is set? */ - if (terminate_immediately) - { --#if defined (HISTORY) -+#if defined (HISTORY) && ! defined (HAVE_POSIX_SIGSETJMP) - /* XXX - will inhibit history file being written */ - history_lines_this_session = 0; - #endif -@@ -514,6 +514,11 @@ termsig_sighandler (sig) - SIGRETURN (0); - } - -+#if defined (HAVE_POSIX_SIGSETJMP) -+extern volatile procenv_t terminating_now; -+extern volatile sig_atomic_t jump_with_sig; -+#endif /* HAVE_POSIX_SIGSETJMP */ -+ - void - termsig_handler (sig) - int sig; -@@ -528,32 +533,39 @@ termsig_handler (sig) - handling_termsig = 1; - terminating_signal = 0; /* keep macro from re-testing true. */ - -+#if ! defined (HAVE_POSIX_SIGSETJMP) - /* I don't believe this condition ever tests true. */ - if (sig == SIGINT && signal_is_trapped (SIGINT)) - run_interrupt_trap (); - --#if defined (HISTORY) -+# if defined (HISTORY) - if (interactive_shell && sig != SIGABRT) - maybe_save_shell_history (); --#endif /* HISTORY */ -+# endif /* HISTORY */ - --#if defined (JOB_CONTROL) -+# if defined (JOB_CONTROL) - if (sig == SIGHUP && (interactive || (subshell_environment & (SUBSHELL_COMSUB|SUBSHELL_PROCSUB)))) - hangup_all_jobs (); - end_job_control (); --#endif /* JOB_CONTROL */ -+# endif /* JOB_CONTROL */ - --#if defined (PROCESS_SUBSTITUTION) -+# if defined (PROCESS_SUBSTITUTION) - unlink_fifo_list (); --#endif /* PROCESS_SUBSTITUTION */ -+# endif /* PROCESS_SUBSTITUTION */ -+#endif /* ! HAVE_POSIX_SIGSETJMP */ - - /* Reset execution context */ - loop_level = continuing = breaking = funcnest = 0; - executing_list = comsub_ignore_return = return_catch_flag = 0; - -+#if defined (HAVE_POSIX_SIGSETJMP) -+ jump_with_sig = sig; -+ siglongjmp(terminating_now, 1); -+#else /* ! HAVE_POSIX_SIGSETJMP */ - run_exit_trap (); - set_signal_handler (sig, SIG_DFL); - kill (getpid (), sig); -+#endif /* ! HAVE_POSIX_SIGSETJMP */ - } - - /* What we really do when SIGINT occurs. */ +*** ../bash-4.2-patched/sig.c Tue Nov 23 08:21:22 2010 +--- sig.c Tue Mar 8 21:28:32 2011 +*************** +*** 47,50 **** +--- 47,51 ---- + #if defined (READLINE) + # include "bashline.h" ++ # include + #endif + +*************** +*** 63,66 **** +--- 64,68 ---- + extern int history_lines_this_session; + #endif ++ extern int no_line_editing; + + extern void initialize_siglist (); +*************** +*** 506,510 **** + #if defined (HISTORY) + /* XXX - will inhibit history file being written */ +! history_lines_this_session = 0; + #endif + terminate_immediately = 0; +--- 508,515 ---- + #if defined (HISTORY) + /* XXX - will inhibit history file being written */ +! # if defined (READLINE) +! if (interactive_shell == 0 || interactive == 0 || (sig != SIGHUP && sig != SIGTERM) || no_line_editing || (RL_ISSTATE (RL_STATE_READCMD) == 0)) +! # endif +! history_lines_this_session = 0; + #endif + terminate_immediately = 0; diff --git a/bash.changes b/bash.changes index 91e4bc53..98d2c714 100644 --- a/bash.changes +++ b/bash.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Wed Mar 9 12:00:48 CET 2011 - werner@suse.de + +- Avoid siglongjmp, compare with + http://lists.gnu.org/archive/html/bug-bash/2011-03/msg00070.html + use temprary solution from Chet + ------------------------------------------------------------------- Tue Mar 8 18:47:59 CET 2011 - werner@suse.de diff --git a/bash.spec b/bash.spec index 3f641718..4b89c9ee 100644 --- a/bash.spec +++ b/bash.spec @@ -49,6 +49,11 @@ Source5: dot.bashrc Source6: dot.profile Source7: bash-rpmlintrc Source8: baselibs.conf +# Remember unsafe method, compare with +# http://lists.gnu.org/archive/html/bug-bash/2011-03/msg00070.html +# http://lists.gnu.org/archive/html/bug-bash/2011-03/msg00071.html +# http://lists.gnu.org/archive/html/bug-bash/2011-03/msg00073.html +Source9: bash-4.2-history-myown.dif.bz2 Patch0: bash-%{bash_vers}.dif Patch1: bash-2.03-manual.patch Patch2: bash-4.0-security.patch