|
|
@@ -0,0 +1,133 @@
|
|
|
+This patch makes sure Bash does not segfault on empty here documents. It
|
|
|
+is derived from Gentoo Linux. The problem can be reproduced with "xargs
|
|
|
+<<< ${EMTPY_VARIABLE}".
|
|
|
+
|
|
|
+--- redir.c 2002-03-12 20:27:38.000000000 +0000
|
|
|
++++ redir.c 2003-05-01 13:04:07.000000000 +0100
|
|
|
+@@ -263,8 +263,10 @@
|
|
|
+ int herelen, n, e;
|
|
|
+
|
|
|
+ herestr = expand_string_to_string (redirectee->word, 0);
|
|
|
+- herelen = strlen (herestr);
|
|
|
+
|
|
|
++ /* verify string wasnt empty */
|
|
|
++ herelen = (herestr == NULL) ? 0 : strlen (herestr);
|
|
|
++
|
|
|
+ n = write (fd, herestr, herelen);
|
|
|
+ if (n == herelen)
|
|
|
+ {
|
|
|
+
|
|
|
+-----------------------------------------------------------------------------
|
|
|
+
|
|
|
+This patch documents two implemented and classical command line options
|
|
|
+"-v" and "-v". It is derived from Debian GNU/Linux.
|
|
|
+
|
|
|
+--- doc/bash.1 Wed Jan 20 22:48:04 1999
|
|
|
++++ doc/bash.1 Sun Nov 14 13:26:59 1999
|
|
|
+@@ -104,6 +104,12 @@
|
|
|
+ This option allows the positional parameters to be set
|
|
|
+ when invoking an interactive shell.
|
|
|
+ .TP
|
|
|
++.B \-v
|
|
|
++Print shell input lines as they are read.
|
|
|
++.TP
|
|
|
++.B \-x
|
|
|
++Print commands and their arguments as they are executed.
|
|
|
++.TP
|
|
|
+ .B \-D
|
|
|
+ A list of all double-quoted strings preceded by \fB$\fP
|
|
|
+ is printed on the standard ouput.
|
|
|
+
|
|
|
+-----------------------------------------------------------------------------
|
|
|
+
|
|
|
+This patch makes sure Bash does not segfault on on "shift" under "shopt
|
|
|
+-s shift_verbose". It is a null pointer dereference caused by an
|
|
|
+erroneous assumption that, when the number of arguments to shift exceeds
|
|
|
+the number of arguments available for shifting, the latter is always
|
|
|
+explicitly specified on the command line rather than left implicit at
|
|
|
+the default 1. The patch was derived from Debian GNU/Linux.
|
|
|
+
|
|
|
+--- builtins/shift.def.orig 2002-10-22 01:05:10.000000000 -0400
|
|
|
++++ builtins/shift.def 2002-10-22 01:05:06.000000000 -0400
|
|
|
+@@ -68,7 +68,7 @@
|
|
|
+ else if (times > number_of_args ())
|
|
|
+ {
|
|
|
+ if (print_shift_error)
|
|
|
+- sh_erange (list->word->word, "shift count");
|
|
|
++ sh_erange (list ? list->word->word : NULL, "shift count");
|
|
|
+ return (EXECUTION_FAILURE);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+-----------------------------------------------------------------------------
|
|
|
+
|
|
|
+This patch makes sure a signal state variable is declared "volatile" so
|
|
|
+it is consistent throughout signal handling. This patch is derived from
|
|
|
+SuSE Linux.
|
|
|
+
|
|
|
+--- quit.h
|
|
|
++++ quit.h Wed May 2 17:38:34 2001
|
|
|
+@@ -21,8 +21,8 @@
|
|
|
+ #if !defined (_QUIT_H_)
|
|
|
+ #define _QUIT_H_
|
|
|
+
|
|
|
+ /* Non-zero means SIGINT has already ocurred. */
|
|
|
+-extern int interrupt_state;
|
|
|
++extern volatile int interrupt_state;
|
|
|
+
|
|
|
+ /* Macro to call a great deal. SIGINT just sets above variable. When
|
|
|
+ it is safe, put QUIT in the code, and the "interrupt" will take place. */
|
|
|
+--- sig.c
|
|
|
++++ sig.c Wed May 2 17:36:17 2001
|
|
|
+@@ -57,7 +57,7 @@
|
|
|
+ extern int interactive, interactive_shell, login_shell, startup_state;
|
|
|
+
|
|
|
+ /* Non-zero after SIGINT. */
|
|
|
+-int interrupt_state;
|
|
|
++volatile int interrupt_state = 0;
|
|
|
+
|
|
|
+ /* The environment at the top-level R-E loop. We use this in
|
|
|
+ the case of error return. */
|
|
|
+@@ -69,7 +69,7 @@
|
|
|
+ #endif /* JOB_CONTROL */
|
|
|
+
|
|
|
+ /* When non-zero, we throw_to_top_level (). */
|
|
|
+-int interrupt_immediately = 0;
|
|
|
++volatile int interrupt_immediately = 0;
|
|
|
+
|
|
|
+ static void initialize_shell_signals ();
|
|
|
+
|
|
|
+-----------------------------------------------------------------------------
|
|
|
+
|
|
|
+This patch adds an explicit recognition for terminal sequence "kD" to be
|
|
|
+"Delete" key. This is derived from Debian GNU/Linux and SuSE Linux.
|
|
|
+
|
|
|
+--- lib/readline/terminal.c
|
|
|
++++ lib/readline/terminal.c Thu Jul 18 14:34:00 2002
|
|
|
+@@ -145,6 +145,9 @@
|
|
|
+ static char *_rl_term_kH;
|
|
|
+ static char *_rl_term_at7; /* @7 */
|
|
|
+
|
|
|
++/* The key sequence sent by the Delete key, if any. */
|
|
|
++static char *_rl_term_kD;
|
|
|
++
|
|
|
+ /* Insert key */
|
|
|
+ static char *_rl_term_kI;
|
|
|
+
|
|
|
+@@ -313,6 +316,7 @@
|
|
|
+ { "ei", &_rl_term_ei },
|
|
|
+ { "ic", &_rl_term_ic },
|
|
|
+ { "im", &_rl_term_im },
|
|
|
++ { "kD", &_rl_term_kD }, /* delete */
|
|
|
+ { "kH", &_rl_term_kH }, /* home down ?? */
|
|
|
+ { "kI", &_rl_term_kI }, /* insert */
|
|
|
+ { "kd", &_rl_term_kd },
|
|
|
+@@ -496,6 +500,7 @@
|
|
|
+
|
|
|
+ _rl_bind_if_unbound (_rl_term_kh, rl_beg_of_line); /* Home */
|
|
|
+ _rl_bind_if_unbound (_rl_term_at7, rl_end_of_line); /* End */
|
|
|
++ _rl_bind_if_unbound (_rl_term_kD, rl_delete); /* Delete */
|
|
|
+
|
|
|
+ _rl_keymap = xkeymap;
|
|
|
+ }
|
|
|
+
|