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; } ----------------------------------------------------------------------------- This patch makes sure Bash does not segfault on a particular error. It is derived from RedHat Linux. --- builtins/common.c.warnings 2003-03-25 17:48:02.000000000 +0000 +++ builtins/common.c 2003-03-25 17:49:03.000000000 +0000 @@ -244,7 +244,7 @@ char *s; { if (s) - builtin_error ("%s: no job control"); + builtin_error ("%s: no job control", s); else builtin_error ("no job control"); } ----------------------------------------------------------------------------- This adds the OpenPKG packaging brand. Index: version.c --- version.c.orig 2002-04-03 15:49:19.000000000 +0200 +++ version.c 2003-10-06 17:23:18.000000000 +0200 @@ -63,7 +63,7 @@ show_shell_version (extended) int extended; { - printf ("GNU bash, version %s (%s)\n", shell_version_string (), MACHTYPE); + printf ("GNU bash, version %s (%s) [@l_openpkg_release@]\n", shell_version_string (), MACHTYPE); if (extended) printf ("Copyright (C) 2002 Free Software Foundation, Inc.\n"); } ----------------------------------------------------------------------------- Port to HP-UX 11i and similar less smart platforms. Index: configure --- configure.orig 2002-07-16 15:31:47.000000000 +0200 +++ configure 2004-06-07 10:31:26.000000000 +0200 @@ -1146,6 +1146,7 @@ *-beos*) opt_bash_malloc=no ;; # they say it's suitable *-cygwin*) opt_bash_malloc=no ;; # Cygnus's CYGWIN environment *-opennt*|*-interix*) opt_bash_malloc=no ;; # Interix, now owned by Microsoft +*-hpux*) opt_bash_malloc=no ;; # HP HP-UX esac # memory scrambling on free() @@ -1211,7 +1212,7 @@ else MALLOC_LIB= - MALLOC_LIBRARY= + MALLOC_LIBRARY=dummy MALLOC_LDFLAGS= MALLOC_DEP= fi Index: mksyntax.c --- mksyntax.c.orig 2002-02-07 15:32:28.000000000 +0100 +++ mksyntax.c 2004-06-04 11:53:19.000000000 +0200 @@ -128,7 +128,11 @@ switch (i) { +#if defined(__STDC__) case '\a': xbuf[1] = 'a'; break; +#else + case 7: xbuf[1] = 'a'; break; +#endif case '\v': xbuf[1] = 'v'; break; case '\b': xbuf[1] = 'b'; break; case '\f': xbuf[1] = 'f'; break; Index: syntax.h --- syntax.h.orig 2002-02-25 17:52:37.000000000 +0100 +++ syntax.h 2004-06-04 11:53:49.000000000 +0200 @@ -21,6 +21,8 @@ #ifndef _SYNTAX_H_ #define _SYNTAX_H_ +#include "config.h" + /* Defines for use by mksyntax.c */ #define slashify_in_quotes "\\`$\"\n" Index: builtins/printf.def --- builtins/printf.def.orig 2002-05-13 20:36:04.000000000 +0200 +++ builtins/printf.def 2004-06-04 11:57:44.000000000 +0200 @@ -114,7 +114,7 @@ static intmax_t getintmax __P((void)); static uintmax_t getuintmax __P((void)); -#if defined (HAVE_LONG_DOUBLE) && HAVE_DECL_STRTOLD +#if defined (HAVE_LONG_DOUBLE) && HAVE_DECL_STRTOLD && !defined(HPUX) typedef long double floatmax_t; # define FLOATMAX_CONV "L" # define strtofltmax strtold