summaryrefslogtreecommitdiffstats
path: root/source/a/bash/bash-4.3-patches/bash43-033
diff options
context:
space:
mode:
author Patrick J Volkerding <volkerdi@slackware.com>2016-06-30 20:26:57 +0000
committer Eric Hameleers <alien@slackware.com>2018-05-31 23:31:18 +0200
commitd31c50870d0bee042ce660e445c9294a59a3a65b (patch)
tree6bfc0de3c95267b401b620c2c67859557dc60f97 /source/a/bash/bash-4.3-patches/bash43-033
parent76fc4757ac91ac7947a01fb7b53dddf9a78a01d1 (diff)
downloadcurrent-d31c50870d0bee042ce660e445c9294a59a3a65b.tar.gz
current-d31c50870d0bee042ce660e445c9294a59a3a65b.tar.xz
Slackware 14.2slackware-14.2
Thu Jun 30 20:26:57 UTC 2016 Slackware 14.2 x86_64 stable is released! The long development cycle (the Linux community has lately been living in "interesting times", as they say) is finally behind us, and we're proud to announce the release of Slackware 14.2. The new release brings many updates and modern tools, has switched from udev to eudev (no systemd), and adds well over a hundred new packages to the system. Thanks to the team, the upstream developers, the dedicated Slackware community, and everyone else who pitched in to help make this release a reality. The ISOs are off to be replicated, a 6 CD-ROM 32-bit set and a dual-sided 32-bit/64-bit x86/x86_64 DVD. Please consider supporting the Slackware project by picking up a copy from store.slackware.com. We're taking pre-orders now, and offer a discount if you sign up for a subscription. Have fun! :-)
Diffstat (limited to 'source/a/bash/bash-4.3-patches/bash43-033')
-rw-r--r--source/a/bash/bash-4.3-patches/bash43-033225
1 files changed, 225 insertions, 0 deletions
diff --git a/source/a/bash/bash-4.3-patches/bash43-033 b/source/a/bash/bash-4.3-patches/bash43-033
new file mode 100644
index 000000000..5f5147ffd
--- /dev/null
+++ b/source/a/bash/bash-4.3-patches/bash43-033
@@ -0,0 +1,225 @@
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.3
+Patch-ID: bash43-033
+
+Bug-Reported-by: mickael9@gmail.com, Jan Rome <jan.rome@gmail.com>
+Bug-Reference-ID: <20140907224046.382ED3610CC@mickael-laptop.localdomain>,
+ <540D661D.50908@gmail.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-09/msg00029.html
+ http://lists.gnu.org/archive/html/bug-bash/2014-09/msg00030.html
+
+Bug-Description:
+
+Bash does not clean up the terminal state in all cases where bash or
+readline modifies it and bash is subsequently terminated by a fatal signal.
+This happens when the `read' builtin modifies the terminal settings, both
+when readline is active and when it is not. It occurs most often when a script
+installs a trap that exits on a signal without re-sending the signal to itself.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.3-patched/shell.c 2014-01-14 08:04:32.000000000 -0500
+--- shell.c 2014-12-22 10:27:50.000000000 -0500
+***************
+*** 74,77 ****
+--- 74,78 ----
+
+ #if defined (READLINE)
++ # include <readline/readline.h>
+ # include "bashline.h"
+ #endif
+***************
+*** 910,913 ****
+--- 912,923 ----
+ fflush (stderr);
+
++ /* Clean up the terminal if we are in a state where it's been modified. */
++ #if defined (READLINE)
++ if (RL_ISSTATE (RL_STATE_TERMPREPPED) && rl_deprep_term_function)
++ (*rl_deprep_term_function) ();
++ #endif
++ if (read_tty_modified ())
++ read_tty_cleanup ();
++
+ /* Do trap[0] if defined. Allow it to override the exit status
+ passed to us. */
+*** ../bash-4.3-patched/builtins/read.def 2014-10-01 12:57:38.000000000 -0400
+--- builtins/read.def 2014-12-22 10:48:54.000000000 -0500
+***************
+*** 141,148 ****
+ int sigalrm_seen;
+
+! static int reading;
+ static SigHandler *old_alrm;
+ static unsigned char delim;
+
+ /* In all cases, SIGALRM just sets a flag that we check periodically. This
+ avoids problems with the semi-tricky stuff we do with the xfree of
+--- 141,150 ----
+ int sigalrm_seen;
+
+! static int reading, tty_modified;
+ static SigHandler *old_alrm;
+ static unsigned char delim;
+
++ static struct ttsave termsave;
++
+ /* In all cases, SIGALRM just sets a flag that we check periodically. This
+ avoids problems with the semi-tricky stuff we do with the xfree of
+***************
+*** 189,193 ****
+ SHELL_VAR *var;
+ TTYSTRUCT ttattrs, ttset;
+- struct ttsave termsave;
+ #if defined (ARRAY_VARS)
+ WORD_LIST *alist;
+--- 191,194 ----
+***************
+*** 222,226 ****
+ USE_VAR(lastsig);
+
+! sigalrm_seen = reading = 0;
+
+ i = 0; /* Index into the string that we are reading. */
+--- 223,227 ----
+ USE_VAR(lastsig);
+
+! sigalrm_seen = reading = tty_modified = 0;
+
+ i = 0; /* Index into the string that we are reading. */
+***************
+*** 439,442 ****
+--- 440,445 ----
+ goto assign_vars;
+ }
++ if (interactive_shell == 0)
++ initialize_terminating_signals ();
+ old_alrm = set_signal_handler (SIGALRM, sigalrm);
+ add_unwind_protect (reset_alarm, (char *)NULL);
+***************
+*** 483,487 ****
+--- 486,493 ----
+ if (i < 0)
+ sh_ttyerror (1);
++ tty_modified = 1;
+ add_unwind_protect ((Function *)ttyrestore, (char *)&termsave);
++ if (interactive_shell == 0)
++ initialize_terminating_signals ();
+ }
+ }
+***************
+*** 498,502 ****
+--- 504,511 ----
+ sh_ttyerror (1);
+
++ tty_modified = 1;
+ add_unwind_protect ((Function *)ttyrestore, (char *)&termsave);
++ if (interactive_shell == 0)
++ initialize_terminating_signals ();
+ }
+
+***************
+*** 589,592 ****
+--- 598,603 ----
+ else
+ lastsig = 0;
++ if (terminating_signal && tty_modified)
++ ttyrestore (&termsave); /* fix terminal before exiting */
+ CHECK_TERMSIG;
+ eof = 1;
+***************
+*** 979,982 ****
+--- 990,1007 ----
+ {
+ ttsetattr (ttp->fd, ttp->attrs);
++ tty_modified = 0;
++ }
++
++ void
++ read_tty_cleanup ()
++ {
++ if (tty_modified)
++ ttyrestore (&termsave);
++ }
++
++ int
++ read_tty_modified ()
++ {
++ return (tty_modified);
+ }
+
+*** ../bash-4.3-patched/builtins/common.h 2014-10-01 12:57:47.000000000 -0400
+--- builtins/common.h 2014-12-22 10:10:14.000000000 -0500
+***************
+*** 123,126 ****
+--- 141,148 ----
+ extern void getopts_reset __P((int));
+
++ /* Functions from read.def */
++ extern void read_tty_cleanup __P((void));
++ extern int read_tty_modified __P((void));
++
+ /* Functions from set.def */
+ extern int minus_o_option_value __P((char *));
+*** ../bash-4.3-patched/bashline.c 2014-05-14 09:22:39.000000000 -0400
+--- bashline.c 2014-09-08 11:28:56.000000000 -0400
+***************
+*** 203,206 ****
+--- 203,207 ----
+ extern int array_needs_making;
+ extern int posixly_correct, no_symbolic_links;
++ extern int sigalrm_seen;
+ extern char *current_prompt_string, *ps1_prompt;
+ extern STRING_INT_ALIST word_token_alist[];
+***************
+*** 4209,4214 ****
+ /* If we're going to longjmp to top_level, make sure we clean up readline.
+ check_signals will call QUIT, which will eventually longjmp to top_level,
+! calling run_interrupt_trap along the way. */
+! if (interrupt_state)
+ rl_cleanup_after_signal ();
+ bashline_reset_event_hook ();
+--- 4262,4268 ----
+ /* If we're going to longjmp to top_level, make sure we clean up readline.
+ check_signals will call QUIT, which will eventually longjmp to top_level,
+! calling run_interrupt_trap along the way. The check for sigalrm_seen is
+! to clean up the read builtin's state. */
+! if (terminating_signal || interrupt_state || sigalrm_seen)
+ rl_cleanup_after_signal ();
+ bashline_reset_event_hook ();
+*** ../bash-4.3-patched/sig.c 2014-01-10 15:06:06.000000000 -0500
+--- sig.c 2014-09-08 11:26:33.000000000 -0400
+***************
+*** 533,538 ****
+ /* Set the event hook so readline will call it after the signal handlers
+ finish executing, so if this interrupted character input we can get
+! quick response. */
+! if (interactive_shell && interactive && no_line_editing == 0)
+ bashline_set_event_hook ();
+ #endif
+--- 533,540 ----
+ /* Set the event hook so readline will call it after the signal handlers
+ finish executing, so if this interrupted character input we can get
+! quick response. If readline is active or has modified the terminal we
+! need to set this no matter what the signal is, though the check for
+! RL_STATE_TERMPREPPED is possibly redundant. */
+! if (RL_ISSTATE (RL_STATE_SIGHANDLER) || RL_ISSTATE (RL_STATE_TERMPREPPED))
+ bashline_set_event_hook ();
+ #endif
+*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
+--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 32
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 33
+
+ #endif /* _PATCHLEVEL_H_ */