.
OBS-URL: https://build.opensuse.org/package/show/Base:System/bash?expand=0&rev=67
This commit is contained in:
parent
0bd33b74a3
commit
f420d1adce
BIN
bash-4.2-history-myown.dif.bz2
(Stored with Git LFS)
Normal file
BIN
bash-4.2-history-myown.dif.bz2
(Stored with Git LFS)
Normal file
Binary file not shown.
@ -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;
|
||||
*** ../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 <readline/readline.h>
|
||||
#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. */
|
||||
***************
|
||||
*** 63,66 ****
|
||||
--- 64,68 ----
|
||||
extern int history_lines_this_session;
|
||||
#endif
|
||||
+ extern int no_line_editing;
|
||||
|
||||
+#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. */
|
||||
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;
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user