rpms/bash/F-7 bash-3.2-286861.patch, NONE, 1.1 bash-3.2-344411.patch, NONE, 1.1 bash-3.2-rng.patch, NONE, 1.1 bash-ulimit-m.patch, NONE, 1.1 bash32-010, NONE, 1.1 bash32-011, NONE, 1.1 bash32-012, NONE, 1.1 bash32-013, NONE, 1.1 bash32-014, NONE, 1.1 bash32-015, NONE, 1.1 bash32-016, NONE, 1.1 bash32-017, NONE, 1.1 bash32-018, NONE, 1.1 bash32-019, NONE, 1.1 bash32-020, NONE, 1.1 bash32-021, NONE, 1.1 bash32-022, NONE, 1.1 bash32-023, NONE, 1.1 bash32-024, NONE, 1.1 bash32-025, NONE, 1.1 readline-5.2-inv.patch, NONE, 1.1 bash.spec, 1.140, 1.141

Tomas Janousek (tjanouse) fedora-extras-commits at redhat.com
Mon Nov 26 14:49:06 UTC 2007


Author: tjanouse

Update of /cvs/pkgs/rpms/bash/F-7
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv6618/F-7

Modified Files:
	bash.spec 
Added Files:
	bash-3.2-286861.patch bash-3.2-344411.patch bash-3.2-rng.patch 
	bash-ulimit-m.patch bash32-010 bash32-011 bash32-012 
	bash32-013 bash32-014 bash32-015 bash32-016 bash32-017 
	bash32-018 bash32-019 bash32-020 bash32-021 bash32-022 
	bash32-023 bash32-024 bash32-025 readline-5.2-inv.patch 
Log Message:
Merge 3.2-19 into F-7 and F-8.


bash-3.2-286861.patch:

--- NEW FILE bash-3.2-286861.patch ---
286861: Wrong input confuses bash's arithmetic unit permanently

If evalerror (thus longjmp) is called while noeval != 0, it stays nonzero and
assignments cease to work. Such expressions are for example:

let tmp="foo.a"+0   (only in bash 3.2)
let x=(0?(3?4):3)

I think we should reset noeval to zero in the evalexp function (or restore
expr_stack[0], probably).

Written-by: Tomas Janousek <tjanouse at redhat.com>

--- bash-3.2/expr.c.286861	2007-10-23 14:48:38.000000000 +0200
+++ bash-3.2/expr.c	2007-11-06 18:48:24.000000000 +0100
@@ -337,6 +337,7 @@
       return (0);
     }
 
+  noeval = 0;
   val = subexpr (expr);
 
   if (validp)

bash-3.2-344411.patch:

--- NEW FILE bash-3.2-344411.patch ---
344411: $RANDOM stays the same when job executed in the background

In bash 3.0, random was seeded whenever subshell_environment != 0.

In bash 3.2, random was seeded whenever subshell_environment != 0 &&
seeded_subshell == 0. And when it was seeded, seeded_subshell was set to 1.

Therefore, in 3.2, if you seeded random in a subshell and in this subshell
invoked another one, it wasn't reseeded as it should have been. A testcase for
that is this:
    ( echo $RANDOM; ( echo $RANDOM ); ( echo $RANDOM ) )

Tomas's patch (bash-3.2-rng.patch) changed the code to use subshell_level.
subshell_level is not increased for simple async commands, however. So,
although he fixed the previous case, he introduced another. Here's a testcase:
    echo $RANDOM; echo $RANDOM & echo $RANDOM &

I decided to just compare the pids, that should be safe enough.

Written-by: Tomas Janousek <tjanouse at redhat.com>
Reviewed-by: Tomas Mraz <tmraz at redhat.com>

--- bash-3.2/variables.c.344411	2007-11-06 19:26:42.000000000 +0100
+++ bash-3.2/variables.c	2007-11-06 20:27:25.000000000 +0100
@@ -1211,7 +1211,7 @@
      arrayind_t unused;
 {
   sbrand ((unsigned int)strtoul (value, (char **)NULL, 10));
-  seeded_subshell = subshell_level;
+  seeded_subshell = getpid();
   return (self);
 }
 
@@ -1221,10 +1221,10 @@
   int rv;
 
   /* Reset for command and process substitution. */
-  if (seeded_subshell < subshell_level)
+  if (seeded_subshell != getpid())
     {
       seed_random ();
-      seeded_subshell = subshell_level;
+      seeded_subshell = getpid();
     }
 
   do

bash-3.2-rng.patch:

--- NEW FILE bash-3.2-rng.patch ---
diff -up bash-3.2/config.h.in.rng.patch bash-3.2/config.h.in
--- bash-3.2/config.h.in.rng.patch	2007-08-20 13:42:49.000000000 +0200
+++ bash-3.2/config.h.in	2007-08-20 13:42:49.000000000 +0200
@@ -203,6 +203,8 @@
 
 #define DEFAULT_MAIL_DIRECTORY "/var/spool/mail"
 
+#undef PATH_RANDOMDEV
+
 /* Characteristics of the system's header files and libraries that affect
    the compilation environment. */
 
@@ -817,6 +819,10 @@
 /* Define if you have the wcwidth function.  */
 #undef HAVE_WCWIDTH
 
+#undef HAVE_RANDOM
+
+#undef HAVE_SRANDOM
+
 /* Presence of certain system include files. */
 
 /* Define if you have the <arpa/inet.h> header file. */
diff -up bash-3.2/configure.in.rng.patch bash-3.2/configure.in
--- bash-3.2/configure.in.rng.patch	2007-08-20 13:42:49.000000000 +0200
+++ bash-3.2/configure.in	2007-08-20 13:42:49.000000000 +0200
@@ -111,6 +111,7 @@ AC_ARG_WITH(gnu-malloc, AC_HELP_STRING([
 AC_ARG_WITH(installed-readline, AC_HELP_STRING([--with-installed-readline], [use a version of the readline library that is already installed]), opt_with_installed_readline=$withval)
 AC_ARG_WITH(purecov, AC_HELP_STRING([--with-purecov], [configure to postprocess with pure coverage]), opt_purecov=$withval)
 AC_ARG_WITH(purify, AC_HELP_STRING([--with-purify], [configure to postprocess with purify]), opt_purify=$withval)
+AC_ARG_WITH(random, AC_HELP_STRING([--with-randomdev=path], [use specified random device instead of /dev/urandom]), opt_randomdev=$withval)
 
 if test "$opt_bash_malloc" = yes; then
 	MALLOC_TARGET=malloc
@@ -152,6 +153,15 @@ if test -z "${DEBUGGER_START_FILE}"; the
 	DEBUGGER_START_FILE=${ac_default_prefix}/share/bashdb/bashdb-main.inc
 fi
 
+if test "$opt_randomdev" = yes -o -z "$opt_randomdev"; then
+	opt_randomdev="/dev/urandom"
+elif test "$opt_randomdev" = no; then
+	opt_randomdev=
+fi
+if test -n "$opt_randomdev"; then
+	AC_DEFINE_UNQUOTED(PATH_RANDOMDEV, "$opt_randomdev", [Random device path.])
+fi
+
 dnl optional shell features in config.h.in
 opt_minimal_config=no
 
@@ -708,6 +718,8 @@ AC_CHECK_FUNCS(bcopy bzero confstr fnmat
 		setenv setlinebuf setlocale setvbuf siginterrupt strchr \
 		sysconf tcgetattr times ttyname tzset unsetenv)
 
+AC_CHECK_FUNCS(random srandom)
+
 AC_CHECK_FUNCS(vsnprintf snprintf vasprintf asprintf)
 AC_CHECK_FUNCS(isascii isblank isgraph isprint isspace isxdigit)
 AC_CHECK_FUNCS(getpwent getpwnam getpwuid)
diff -up bash-3.2/variables.c.rng.patch bash-3.2/variables.c
--- bash-3.2/variables.c.rng.patch	2006-09-08 19:33:32.000000000 +0200
+++ bash-3.2/variables.c	2007-08-20 16:16:56.000000000 +0200
@@ -42,6 +42,11 @@
 #include "bashansi.h"
 #include "bashintl.h"
 
+#if defined (PATH_RANDOMDEV)
+#  include <errno.h>
+#  include "filecntl.h"
+#endif
+
 #include "shell.h"
 #include "flags.h"
 #include "execute_cmd.h"
@@ -182,7 +187,8 @@ static SHELL_VAR *get_seconds __P((SHELL
 static SHELL_VAR *init_seconds_var __P((void));
 
 static int brand __P((void));
-static void sbrand __P((unsigned long));		/* set bash random number generator. */
+static void sbrand __P((unsigned int));		/* set bash random number generator. */
+static void seed_random __P((void));                    /* seed the generator randomly */
 static SHELL_VAR *assign_random __P((SHELL_VAR *, char *, arrayind_t));
 static SHELL_VAR *get_random __P((SHELL_VAR *));
 
@@ -494,9 +500,6 @@ initialize_shell_variables (env, privmod
     }
 #endif /* HISTORY */
 
-  /* Seed the random number generator. */
-  sbrand (dollar_dollar_pid + shell_start_time);
-
   /* Handle some "special" variables that we may have inherited from a
      parent shell. */
   if (interactive_shell)
@@ -1143,9 +1146,11 @@ init_seconds_var ()
 }
      
 /* The random number seed.  You can change this by setting RANDOM. */
+#if !defined (HAVE_RANDOM)
 static unsigned long rseed = 1;
+#endif
 static int last_random_value;
-static int seeded_subshell = 0;
+static int seeded_subshell = -1;
 
 /* A linear congruential random number generator based on the example
    one in the ANSI C standard.  This one isn't very good, but a more
@@ -1155,28 +1160,58 @@ static int seeded_subshell = 0;
 static int
 brand ()
 {
+#if defined (HAVE_RANDOM)
+  unsigned int rseed;
+  rseed = random();
+#else
   rseed = rseed * 1103515245 + 12345;
+#endif
   return ((unsigned int)((rseed >> 16) & 32767));	/* was % 32768 */
 }
 
 /* Set the random number generator seed to SEED. */
 static void
 sbrand (seed)
-     unsigned long seed;
+     unsigned int seed;
 {
+#if defined (HAVE_RANDOM)
+  srandom((unsigned int)seed);
+#else
   rseed = seed;
+#endif
   last_random_value = 0;
 }
 
+static void
+seed_random ()
+{
+  unsigned int seed;
+#if defined (PATH_RANDOMDEV)
+  int fd;
+  int rv;
+  if ((rv = fd = open (PATH_RANDOMDEV, O_RDONLY)) != -1) { 
+    while ((rv = read(fd, &seed, sizeof(seed))) != sizeof(seed) && errno == EINTR);
+    close (fd);
+  }
+  if (rv != sizeof(seed)) {
+#endif
+    struct timeval tv;
+    gettimeofday(&tv, NULL);
+    seed = (unsigned int)tv.tv_sec + (unsigned int)tv.tv_usec + getpid();
+#if defined (PATH_RANDOMDEV)
+  }
+#endif
+  sbrand (seed);
+}
+
 static SHELL_VAR *
 assign_random (self, value, unused)
      SHELL_VAR *self;
      char *value;
      arrayind_t unused;
 {
-  sbrand (strtoul (value, (char **)NULL, 10));
-  if (subshell_environment)
-    seeded_subshell = 1;
+  sbrand ((unsigned int)strtoul (value, (char **)NULL, 10));
+  seeded_subshell = subshell_level;
   return (self);
 }
 
@@ -1186,10 +1221,10 @@ get_random_number ()
   int rv;
 
   /* Reset for command and process substitution. */
-  if (subshell_environment && seeded_subshell == 0)
+  if (seeded_subshell < subshell_level)
     {
-      sbrand (rseed + getpid() + NOW);
-      seeded_subshell = 1;
+      seed_random ();
+      seeded_subshell = subshell_level;
     }
 
   do

bash-ulimit-m.patch:

--- NEW FILE bash-ulimit-m.patch ---
--- bash-3.2/builtins/ulimit.def.ulimit-m	2006-03-23 20:51:51.000000000 +0000
+++ bash-3.2/builtins/ulimit.def	2007-07-04 16:42:12.000000000 +0100
@@ -38,7 +38,7 @@
     -f	the maximum size of files written by the shell and its children
     -i	the maximum number of pending signals
     -l	the maximum size a process may lock into memory
-    -m	the maximum resident set size
+    -m	the maximum resident set size (has no effect on Linux)
     -n	the maximum number of open file descriptors
     -p	the pipe buffer size
     -q	the maximum number of bytes in POSIX message queues
--- bash-3.2/doc/bash.1.ulimit-m	2007-07-04 16:41:59.000000000 +0100
+++ bash-3.2/doc/bash.1	2007-07-04 16:42:12.000000000 +0100
@@ -8545,7 +8545,7 @@
 The maximum size that may be locked into memory
 .TP
 .B \-m
-The maximum resident set size
+The maximum resident set size (has no effect on Linux)
 .TP
 .B \-n
 The maximum number of open file descriptors (most systems do not


--- NEW FILE bash32-010 ---
			     BASH PATCH REPORT
			     =================

Bash-Release: 3.2
Patch-ID: bash32-010

Bug-Reported-by:	Ryan Waldron <rew at erebor.com>
Bug-Reference-ID:	<20070119065603.546D011E9C at kansas.erebor.com>
Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2007-01/msg00059.html

Bug-Description:

The glibc implementation of regcomp/regexec does not allow backslashes to
escape "ordinary" pattern characters when matching.  Bash used backslashes
to quote all characters when the pattern argument to the [[ special
command's =~ operator was quoted.  This caused the match to fail on Linux
and other systems using GNU libc.

Patch:

*** ../bash-3.2.9/pathexp.h	Sat Feb 19 17:23:18 2005
--- pathexp.h	Wed Jan 31 22:53:16 2007
***************
*** 1,5 ****
  /* pathexp.h -- The shell interface to the globbing library. */
  
! /* Copyright (C) 1987-2005 Free Software Foundation, Inc.
  
     This file is part of GNU Bash, the Bourne Again SHell.
--- 1,5 ----
  /* pathexp.h -- The shell interface to the globbing library. */
  
! /* Copyright (C) 1987-2007 Free Software Foundation, Inc.
  
     This file is part of GNU Bash, the Bourne Again SHell.
***************
*** 33,36 ****
--- 33,37 ----
  #define QGLOB_CVTNULL	0x01	/* convert QUOTED_NULL strings to '\0' */
  #define QGLOB_FILENAME	0x02	/* do correct quoting for matching filenames */
+ #define QGLOB_REGEXP	0x04	/* quote an ERE for regcomp/regexec */
  
  #if defined (EXTENDED_GLOB)
*** ../bash-3.2.9/pathexp.c	Mon May  6 13:43:05 2002
--- pathexp.c	Mon Feb 26 16:59:23 2007
***************
*** 1,5 ****
  /* pathexp.c -- The shell interface to the globbing library. */
  
! /* Copyright (C) 1995-2002 Free Software Foundation, Inc.
  
     This file is part of GNU Bash, the Bourne Again SHell.
--- 1,5 ----
  /* pathexp.c -- The shell interface to the globbing library. */
  
! /* Copyright (C) 1995-2007 Free Software Foundation, Inc.
  
     This file is part of GNU Bash, the Bourne Again SHell.
***************
*** 111,114 ****
--- 111,141 ----
  }
  
+ /* Return 1 if C is a character that is `special' in a POSIX ERE and needs to
+    be quoted to match itself. */
+ static inline int
+ ere_char (c)
+      int c;
+ {
+   switch (c)
+     {
+     case '.':
+     case '[':
+     case '\\':
+     case '(':
+     case ')':
+     case '*':
+     case '+':
+     case '?':
+     case '{':
+     case '|':
+     case '^':
+     case '$':
+       return 1;
+     default: 
+       return 0;
+     }
+   return (0);
+ }
+ 
  /* PATHNAME can contain characters prefixed by CTLESC; this indicates
     that the character is to be quoted.  We quote it here in the style
***************
*** 143,146 ****
--- 170,175 ----
  	  if ((qflags & QGLOB_FILENAME) && pathname[i+1] == '/')
  	    continue;
+ 	  if ((qflags & QGLOB_REGEXP) && ere_char (pathname[i+1]) == 0)
+ 	    continue;
  	  temp[j++] = '\\';
  	  i++;
*** ../bash-3.2.9/subst.c	Tue Nov  7 16:14:41 2006
--- subst.c	Wed Jan 31 23:09:58 2007
***************
*** 5,9 ****
       beauty, but, hey, you're alright.'' */
  
! /* Copyright (C) 1987-2006 Free Software Foundation, Inc.
  
     This file is part of GNU Bash, the Bourne Again SHell.
--- 5,9 ----
       beauty, but, hey, you're alright.'' */
  
! /* Copyright (C) 1987-2007 Free Software Foundation, Inc.
  
     This file is part of GNU Bash, the Bourne Again SHell.
***************
*** 2647,2655 ****
  /* This needs better error handling. */
  /* Expand W for use as an argument to a unary or binary operator in a
!    [[...]] expression.  If SPECIAL is nonzero, this is the rhs argument
     to the != or == operator, and should be treated as a pattern.  In
!    this case, we quote the string specially for the globbing code.  The
!    caller is responsible for removing the backslashes if the unquoted
!    words is needed later. */   
  char *
  cond_expand_word (w, special)
--- 2647,2656 ----
  /* This needs better error handling. */
  /* Expand W for use as an argument to a unary or binary operator in a
!    [[...]] expression.  If SPECIAL is 1, this is the rhs argument
     to the != or == operator, and should be treated as a pattern.  In
!    this case, we quote the string specially for the globbing code.  If
!    SPECIAL is 2, this is an rhs argument for the =~ operator, and should
!    be quoted appropriately for regcomp/regexec.  The caller is responsible
!    for removing the backslashes if the unquoted word is needed later. */   
  char *
  cond_expand_word (w, special)
***************
*** 2659,2662 ****
--- 2660,2664 ----
    char *r, *p;
    WORD_LIST *l;
+   int qflags;
  
    if (w->word == 0 || w->word[0] == '\0')
***************
*** 2673,2678 ****
        else
  	{
  	  p = string_list (l);
! 	  r = quote_string_for_globbing (p, QGLOB_CVTNULL);
  	  free (p);
  	}
--- 2675,2683 ----
        else
  	{
+ 	  qflags = QGLOB_CVTNULL;
+ 	  if (special == 2)
+ 	    qflags |= QGLOB_REGEXP;
  	  p = string_list (l);
! 	  r = quote_string_for_globbing (p, qflags);
  	  free (p);
  	}
*** ../bash-3.2.9/execute_cmd.c	Sat Aug 26 00:23:17 2006
--- execute_cmd.c	Wed Jan 31 23:12:06 2007
***************
*** 1,5 ****
  /* execute_cmd.c -- Execute a COMMAND structure. */
  
! /* Copyright (C) 1987-2005 Free Software Foundation, Inc.
  
     This file is part of GNU Bash, the Bourne Again SHell.
--- 1,5 ----
  /* execute_cmd.c -- Execute a COMMAND structure. */
  
! /* Copyright (C) 1987-2007 Free Software Foundation, Inc.
  
     This file is part of GNU Bash, the Bourne Again SHell.
***************
*** 2547,2551 ****
        if (arg1 == 0)
  	arg1 = nullstr;
!       arg2 = cond_expand_word (cond->right->op, patmatch||rmatch);
        if (arg2 == 0)
  	arg2 = nullstr;
--- 2547,2551 ----
        if (arg1 == 0)
  	arg1 = nullstr;
!       arg2 = cond_expand_word (cond->right->op, rmatch ? 2 : (patmatch ? 1 : 0));
        if (arg2 == 0)
  	arg2 = nullstr;
*** ../bash-3.2/patchlevel.h	Thu Apr 13 08:31:04 2006
--- patchlevel.h	Mon Oct 16 14:22:54 2006
***************
*** 26,30 ****
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 9
  
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 10
  
  #endif /* _PATCHLEVEL_H_ */


--- NEW FILE bash32-011 ---
			     BASH PATCH REPORT
			     =================

Bash-Release: 3.2
Patch-ID: bash32-011

Bug-Reported-by: Petr Sumbera <Petr.Sumbera at Sun.COM>
Bug-Reference-ID: <45AF5F4B.1020800 at sun.com>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-01/msg00049.html

Bug-Description:

Under certain circumstances (loopback mounts), the bash getcwd does not
return correct results.  This patch allows the use of the Solaris libc
getcwd even though it doesn't dynamically allocate memory.

Run `touch configure' to make sure make doesn't try to run autoconf.
Then run configure with whatever options you like.

Patch:

*** ../bash-3.2-patched/configure.in	Tue Sep 26 11:05:45 2006
--- configure.in	Wed Jan 31 09:48:00 2007
***************
*** 6,10 ****
  dnl Process this file with autoconf to produce a configure script.
  
! # Copyright (C) 1987-2006 Free Software Foundation, Inc.
  
  # This program is free software; you can redistribute it and/or modify
--- 6,10 ----
  dnl Process this file with autoconf to produce a configure script.
  
! # Copyright (C) 1987-2007 Free Software Foundation, Inc.
  
  # This program is free software; you can redistribute it and/or modify
***************
*** 992,996 ****
  sco3.2*)	LOCAL_CFLAGS=-DMUST_UNBLOCK_CHLD ;;
  sunos4*)	LOCAL_CFLAGS=-DSunOS4 ;;
! solaris2.5*)	LOCAL_CFLAGS=-DSunOS5 ;;
  lynxos*)	LOCAL_CFLAGS=-DRECYCLES_PIDS ;;
  linux*)		LOCAL_LDFLAGS=-rdynamic		 # allow dynamic loading
--- 992,997 ----
  sco3.2*)	LOCAL_CFLAGS=-DMUST_UNBLOCK_CHLD ;;
  sunos4*)	LOCAL_CFLAGS=-DSunOS4 ;;
! solaris2.5*)	LOCAL_CFLAGS="-DSunOS5 -DSOLARIS" ;;
! solaris2*)	LOCAL_CFLAGS=-DSOLARIS ;;
  lynxos*)	LOCAL_CFLAGS=-DRECYCLES_PIDS ;;
  linux*)		LOCAL_LDFLAGS=-rdynamic		 # allow dynamic loading
*** ../bash-3.2-patched/config-bot.h	Tue Sep 12 16:43:04 2006
--- config-bot.h	Tue Mar  6 10:41:31 2007
***************
*** 2,6 ****
  /* modify settings or make new ones based on what autoconf tells us. */
  
! /* Copyright (C) 1989-2002 Free Software Foundation, Inc.
  
     This file is part of GNU Bash, the Bourne Again SHell.
--- 2,6 ----
  /* modify settings or make new ones based on what autoconf tells us. */
  
! /* Copyright (C) 1989-2007 Free Software Foundation, Inc.
  
     This file is part of GNU Bash, the Bourne Again SHell.
***************
*** 71,77 ****
  #endif
  
! /* If we have a getcwd(3), but it calls popen(), #undef HAVE_GETCWD so
!    the replacement in getcwd.c will be built. */
! #if defined (HAVE_GETCWD) && defined (GETCWD_BROKEN)
  #  undef HAVE_GETCWD
  #endif
--- 71,79 ----
  #endif
  
! /* If we have a getcwd(3), but one that does not dynamically allocate memory,
!    #undef HAVE_GETCWD so the replacement in getcwd.c will be built.  We do
!    not do this on Solaris, because their implementation of loopback mounts
!    breaks the traditional file system assumptions that getcwd uses. */
! #if defined (HAVE_GETCWD) && defined (GETCWD_BROKEN) && !defined (SOLARIS)
  #  undef HAVE_GETCWD
  #endif
*** ../bash-3.2-patched/builtins/common.c	Thu Jul 27 09:39:51 2006
--- builtins/common.c	Tue Mar  6 10:43:27 2007
***************
*** 1,3 ****
! /* Copyright (C) 1987-2005 Free Software Foundation, Inc.
  
     This file is part of GNU Bash, the Bourne Again SHell.
--- 1,3 ----
! /* Copyright (C) 1987-2007 Free Software Foundation, Inc.
  
     This file is part of GNU Bash, the Bourne Again SHell.
***************
*** 476,480 ****
--- 476,484 ----
    if (the_current_working_directory == 0)
      {
+ #if defined (GETCWD_BROKEN)
+       the_current_working_directory = getcwd (0, PATH_MAX);
+ #else
        the_current_working_directory = getcwd (0, 0);
+ #endif
        if (the_current_working_directory == 0)
  	{
*** ../bash-3.2-patched/configure	Tue Sep 26 11:06:01 2006
--- configure	Tue Mar  6 10:59:20 2007
***************
*** 27317,27321 ****
  sco3.2*)	LOCAL_CFLAGS=-DMUST_UNBLOCK_CHLD ;;
  sunos4*)	LOCAL_CFLAGS=-DSunOS4 ;;
! solaris2.5*)	LOCAL_CFLAGS=-DSunOS5 ;;
  lynxos*)	LOCAL_CFLAGS=-DRECYCLES_PIDS ;;
  linux*)		LOCAL_LDFLAGS=-rdynamic		 # allow dynamic loading
--- 27317,27322 ----
  sco3.2*)	LOCAL_CFLAGS=-DMUST_UNBLOCK_CHLD ;;
  sunos4*)	LOCAL_CFLAGS=-DSunOS4 ;;
! solaris2.5*)	LOCAL_CFLAGS="-DSunOS5 -DSOLARIS" ;;
! solaris2*)	LOCAL_CFLAGS=-DSOLARIS ;;
  lynxos*)	LOCAL_CFLAGS=-DRECYCLES_PIDS ;;
  linux*)		LOCAL_LDFLAGS=-rdynamic		 # allow dynamic loading
*** ../bash-3.2/patchlevel.h	Thu Apr 13 08:31:04 2006
--- patchlevel.h	Mon Oct 16 14:22:54 2006
***************
*** 26,30 ****
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 10
  
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 11
  
  #endif /* _PATCHLEVEL_H_ */


--- NEW FILE bash32-012 ---
			     BASH PATCH REPORT
			     =================

Bash-Release: 3.2
Patch-ID: bash32-012

Bug-Reported-by: John Wyman <JohnWyman at celink.com>
Bug-Reference-ID: <5E7DEFC094C35044B87FAE761D9F0EE20143A3B7 at exchange2k.celink.com>
Bug-Reference-URL: 

Bug-Description:

Some systems (AIX 4.x) don't implement the PRI_xxx macros correctly,
causing syntax errors when attempting to compile bash on those systems.
This patch adds support for the PRI_MACROS_BROKEN define.

You will need to re-run `configure' after applying the patch.  Run
`touch configure' so make doesn't try to run autoconf.

Patch:

*** ../bash-3.2.11/config.h.in	Tue Sep 12 16:00:54 2006
--- config.h.in	Tue Mar  6 11:17:55 2007
***************
*** 1,5 ****
  /* config.h -- Configuration file for bash. */
  
! /* Copyright (C) 1987-2006 Free Software Foundation, Inc.
  
     This file is part of GNU Bash, the Bourne Again SHell.
--- 1,5 ----
  /* config.h -- Configuration file for bash. */
  
! /* Copyright (C) 1987-2007 Free Software Foundation, Inc.
  
     This file is part of GNU Bash, the Bourne Again SHell.
***************
*** 414,417 ****
--- 414,419 ----
  #undef HAVE_DECL_STRTOLD
  
+ #undef PRI_MACROS_BROKEN
+ 
  #undef STRTOLD_BROKEN
  
***************
*** 1007,1010 ****
--- 1009,1015 ----
  #undef HAVE_DCGETTEXT
  
+ /* Define if you have the `localeconv' function. */
+ #undef HAVE_LOCALECONV
+ 
  /* Define if your system has a working `malloc' function. */
  /* #undef HAVE_MALLOC */
*** ../bash-3.2.11/builtins/printf.def	Mon Nov 13 08:58:52 2006
--- builtins/printf.def	Sun Feb  4 13:58:59 2007
***************
*** 2,6 ****
  It implements the builtin "printf" in Bash.
  
! Copyright (C) 1997-2005 Free Software Foundation, Inc.
  
  This file is part of GNU Bash, the Bourne Again SHell.
--- 2,6 ----
  It implements the builtin "printf" in Bash.
  
! Copyright (C) 1997-2007 Free Software Foundation, Inc.
  
  This file is part of GNU Bash, the Bourne Again SHell.
***************
*** 71,74 ****
--- 71,78 ----
  #include "common.h"
  
+ #if defined (PRI_MACROS_BROKEN)
+ #  undef PRIdMAX
+ #endif
+ 
  #if !defined (PRIdMAX)
  #  if HAVE_LONG_LONG
*** ../bash-3.2/patchlevel.h	Thu Apr 13 08:31:04 2006
--- patchlevel.h	Mon Oct 16 14:22:54 2006
***************
*** 26,30 ****
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 11
  
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 12
  
  #endif /* _PATCHLEVEL_H_ */


--- NEW FILE bash32-013 ---
			     BASH PATCH REPORT
			     =================

Bash-Release: 3.2
Patch-ID: bash32-013

Bug-Reported-by: Magnus Svensson <msvensson at mysql.com>
Bug-Reference-ID: <45BDC44D.80609 at mysql.com>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2007-01/msg00002.html

Bug-Description:

Readline neglects to reallocate the array it uses to keep track of wrapped
screen lines when increasing its size.  This will eventually result in
segmentation faults when given sufficiently long input.

Patch:

*** ../bash-3.2-patched/lib/readline/display.c	Thu Sep 14 14:20:12 2006
--- lib/readline/display.c	Fri Feb  2 20:23:17 2007
***************
*** 561,574 ****
--- 561,586 ----
        wrap_offset = prompt_invis_chars_first_line = 0;
      }
  
+ #if defined (HANDLE_MULTIBYTE)
  #define CHECK_INV_LBREAKS() \
        do { \
  	if (newlines >= (inv_lbsize - 2)) \
  	  { \
  	    inv_lbsize *= 2; \
  	    inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \
+ 	    _rl_wrapped_line = (int *)xrealloc (_rl_wrapped_line, inv_lbsize * sizeof (int)); \
  	  } \
        } while (0)
+ #else
+ #define CHECK_INV_LBREAKS() \
+       do { \
+ 	if (newlines >= (inv_lbsize - 2)) \
+ 	  { \
+ 	    inv_lbsize *= 2; \
+ 	    inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \
+ 	  } \
+       } while (0)
+ #endif /* HANDLE_MULTIBYTE */
  
  #if defined (HANDLE_MULTIBYTE)	  
  #define CHECK_LPOS() \

*** ../bash-3.2/patchlevel.h	Thu Apr 13 08:31:04 2006
--- patchlevel.h	Mon Oct 16 14:22:54 2006
***************
*** 26,30 ****
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 12
  
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 13
  
  #endif /* _PATCHLEVEL_H_ */


--- NEW FILE bash32-014 ---
			     BASH PATCH REPORT
			     =================

Bash-Release: 3.2
Patch-ID: bash32-014

Bug-Reported-by: Brett Stahlman <brettstahlman at comcast.net>
Bug-Reference-ID: <000701c72d29$a227e0e0$5ec7cf47 at computerroom>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-12/msg00065.html

Bug-Description:

Bash mishandles word splitting under certain circumstances when IFS is
null (IFS=).  Constructs affected include ${param/pat/sub} and others
when expanding arrays (array[@]).

Patch:

*** ../bash-3.2-patched/array.c	Wed Jun  1 16:39:22 2005
--- array.c	Mon Jan 15 22:58:00 2007
***************
*** 121,125 ****
  }
  
- #ifdef INCLUDE_UNUSED
  /*
   * Make and return a new array composed of the elements in array A from
--- 121,124 ----
***************
*** 142,146 ****
  		n = array_create_element (element_index(p), element_value(p));
  		ADD_BEFORE(a->head, n);
! 		mi = element_index(ae);
  	}
  	a->num_elements = i;
--- 141,145 ----
  		n = array_create_element (element_index(p), element_value(p));
  		ADD_BEFORE(a->head, n);
! 		mi = element_index(n);
  	}
  	a->num_elements = i;
***************
*** 148,152 ****
  	return a;
  }
- #endif
  
  /*
--- 147,150 ----
***************
*** 301,304 ****
--- 299,319 ----
  }
  
+ ARRAY	*
+ array_quote_escapes(array)
+ ARRAY	*array;
+ {
+ 	ARRAY_ELEMENT	*a;
+ 	char	*t;
+ 
+ 	if (array == 0 || array_head(array) == 0 || array_empty(array))
+ 		return (ARRAY *)NULL;
+ 	for (a = element_forw(array->head); a != array->head; a = element_forw(a)) {
+ 		t = quote_escapes (a->value);
+ 		FREE(a->value);
+ 		a->value = t;
+ 	}
+ 	return array;
+ }
+ 
  /*
   * Return a string whose elements are the members of array A beginning at
***************
*** 312,318 ****
  int	starsub, quoted;
  {
  	ARRAY_ELEMENT	*h, *p;
  	arrayind_t	i;
! 	char		*ifs, sep[2];
  
  	p = a ? array_head (a) : 0;
--- 327,334 ----
  int	starsub, quoted;
  {
+ 	ARRAY		*a2;
  	ARRAY_ELEMENT	*h, *p;
  	arrayind_t	i;
! 	char		*ifs, sep[2], *t;
  
  	p = a ? array_head (a) : 0;
***************
*** 337,340 ****
--- 353,363 ----
  		;
  
+ 	a2 = array_slice(a, h, p);
+ 
+ 	if (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT))
+ 		array_quote(a2);
+ 	else
+ 		array_quote_escapes(a2);
+ 
  	if (starsub && (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT))) {
  		ifs = getifs();
***************
*** 344,348 ****
  	sep[1] = '\0';
  
! 	return (array_to_string_internal (h, p, sep, quoted));
  }
  
--- 367,374 ----
  	sep[1] = '\0';
  
! 	t = array_to_string (a2, sep, 0);
! 	array_dispose(a2);
! 
! 	return t;
  }
  
***************
*** 368,372 ****
  
  	if (mflags & MATCH_QUOTED)
! 		array_quote (a2);
  	if (mflags & MATCH_STARSUB) {
  		ifs = getifs();
--- 394,400 ----
  
  	if (mflags & MATCH_QUOTED)
! 		array_quote(a2);
! 	else
! 		array_quote_escapes(a2);
  	if (mflags & MATCH_STARSUB) {
  		ifs = getifs();
*** ../bash-3.2-patched/array.h	Sun Jun  1 15:50:30 2003
--- array.h	Mon Jan 15 22:35:35 2007
***************
*** 56,59 ****
--- 56,60 ----
  extern int	array_shift_element __P((ARRAY *, char *));
  extern ARRAY	*array_quote __P((ARRAY *));
+ extern ARRAY	*array_quote_escapes __P((ARRAY *));
  
  extern char	*array_subrange __P((ARRAY *, arrayind_t, arrayind_t, int, int));
*** ../bash-3.2-patched/subst.c	Fri Mar  2 16:20:50 2007
--- subst.c	Tue Mar  6 11:40:55 2007
***************
*** 1888,1892 ****
--- 1889,1899 ----
  #endif
  
+   /* XXX -- why call quote_list if ifs == 0?  we can get away without doing
+      it now that quote_escapes quotes spaces */
+ #if 0
    tlist = ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || (ifs && *ifs == 0))
+ #else
+   tlist = (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES))
+ #endif
  		? quote_list (list)
  		: list_quote_escapes (list);
***************
*** 2922,2926 ****
  /* Quote escape characters in string s, but no other characters.  This is
     used to protect CTLESC and CTLNUL in variable values from the rest of
!    the word expansion process after the variable is expanded. */
  char *
  quote_escapes (string)
--- 2935,2944 ----
  /* Quote escape characters in string s, but no other characters.  This is
     used to protect CTLESC and CTLNUL in variable values from the rest of
!    the word expansion process after the variable is expanded.  If IFS is
!    null, we quote spaces as well, just in case we split on spaces later
!    (in the case of unquoted $@, we will eventually attempt to split the
!    entire word on spaces).  Corresponding code exists in dequote_escapes.
!    Even if we don't end up splitting on spaces, quoting spaces is not a
!    problem. */
  char *
  quote_escapes (string)
***************
*** 2930,2933 ****
--- 2948,2952 ----
    size_t slen;
    char *result, *send;
+   int quote_spaces;
    DECLARE_MBSTATE; 
  
***************
*** 2935,2938 ****
--- 2954,2958 ----
    send = string + slen;
  
+   quote_spaces = (ifs_value && *ifs_value == 0);
    t = result = (char *)xmalloc ((slen * 2) + 1);
    s = string;
***************
*** 2940,2944 ****
    while (*s)
      {
!       if (*s == CTLESC || *s == CTLNUL)
  	*t++ = CTLESC;
        COPY_CHAR_P (t, s, send);
--- 2960,2964 ----
    while (*s)
      {
!       if (*s == CTLESC || *s == CTLNUL || (quote_spaces && *s == ' '))
  	*t++ = CTLESC;
        COPY_CHAR_P (t, s, send);
***************
*** 2982,2985 ****
--- 3002,3006 ----
    size_t slen;
    char *result, *send;
+   int quote_spaces;
    DECLARE_MBSTATE;
  
***************
*** 2996,3002 ****
      return (strcpy (result, s));
  
    while (*s)
      {
!       if (*s == CTLESC && (s[1] == CTLESC || s[1] == CTLNUL))
  	{
  	  s++;
--- 3017,3024 ----
      return (strcpy (result, s));
  
+   quote_spaces = (ifs_value && *ifs_value == 0);
    while (*s)
      {
!       if (*s == CTLESC && (s[1] == CTLESC || s[1] == CTLNUL || (quote_spaces && s[1] == ' ')))
  	{
  	  s++;
***************
*** 4462,4466 ****
        RESIZE_MALLOCED_BUFFER (istring, istring_index, 2, istring_size, DEFAULT_ARRAY_SIZE);
  
!       if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || c == CTLESC || c == CTLNUL)
  	istring[istring_index++] = CTLESC;
  
--- 4498,4510 ----
        RESIZE_MALLOCED_BUFFER (istring, istring_index, 2, istring_size, DEFAULT_ARRAY_SIZE);
  
!       /* This is essentially quote_string inline */
!       if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) /* || c == CTLESC || c == CTLNUL */)
! 	istring[istring_index++] = CTLESC;
!       /* Escape CTLESC and CTLNUL in the output to protect those characters
! 	 from the rest of the word expansions (word splitting and globbing.)
! 	 This is essentially quote_escapes inline. */
!       else if (c == CTLESC)
! 	istring[istring_index++] = CTLESC;
!       else if (c == CTLNUL || (c == ' ' && (ifs_value && *ifs_value == 0)))
  	istring[istring_index++] = CTLESC;
  
***************
*** 5552,5555 ****
--- 5610,5616 ----
  	 rely on array_subrange to understand how to deal with them). */
        tt = array_subrange (array_cell (v), e1, e2, starsub, quoted);
+ #if 0
+       /* array_subrange now calls array_quote_escapes as appropriate, so the
+ 	 caller no longer needs to. */
        if ((quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) == 0)
  	{
***************
*** 5558,5561 ****
--- 5619,5623 ----
  	}
        else
+ #endif
  	temp = tt;
        break;
***************
*** 5808,5811 ****
--- 5870,5876 ----
      case VT_ARRAYVAR:
        temp = array_patsub (array_cell (v), p, rep, mflags);
+ #if 0
+       /* Don't need to do this anymore; array_patsub calls array_quote_escapes
+ 	 as appropriate before adding the space separators. */
        if (temp && (mflags & MATCH_QUOTED) == 0)
  	{
***************
*** 5814,5817 ****
--- 5879,5883 ----
  	  temp = tt;
  	}
+ #endif
        break;
  #endif
*** ../bash-3.2/patchlevel.h	Thu Apr 13 08:31:04 2006
--- patchlevel.h	Mon Oct 16 14:22:54 2006
***************
*** 26,30 ****
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 13
  
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 14
  
  #endif /* _PATCHLEVEL_H_ */


--- NEW FILE bash32-015 ---
			     BASH PATCH REPORT
			     =================

Bash-Release: 3.2
Patch-ID: bash32-015

Bug-Reported-by:
Bug-Reference-ID:
Bug-Reference-URL:

Bug-Description:

Under certain circumstances, when using FIFOs for process substitution,
bash fails to unlink the FIFOs.  This leaves open file descriptors that
can cause the shell to hang and litters the file system.

Patch:

*** ../bash-3.2-patched/execute_cmd.c	Fri Mar  2 16:20:50 2007
--- execute_cmd.c	Wed Jan 31 23:12:06 2007
***************
*** 3051,3054 ****
--- 3051,3059 ----
      command_line = savestring (the_printed_command_except_trap);
  
+ #if defined (PROCESS_SUBSTITUTION)
+   if ((subshell_environment & SUBSHELL_COMSUB) && (simple_command->flags & CMD_NO_FORK) && fifos_pending() > 0)
+     simple_command->flags &= ~CMD_NO_FORK;
+ #endif
+ 
    execute_disk_command (words, simple_command->redirects, command_line,
  			pipe_in, pipe_out, async, fds_to_close,
*** ../bash-3.2-patched/subst.c	Fri Mar  2 16:20:50 2007
--- subst.c	Tue Mar  6 11:40:55 2007
***************
*** 4129,4132 ****
--- 4151,4160 ----
  }
  
+ int
+ fifos_pending ()
+ {
+   return nfifo;
+ }
+ 
  static char *
  make_named_pipe ()
***************
*** 4178,4181 ****
--- 4206,4215 ----
  }
  
+ int
+ fifos_pending ()
+ {
+   return 0;	/* used for cleanup; not needed with /dev/fd */
+ }
+ 
  void
  unlink_fifo_list ()
***************
*** 4671,4674 ****
--- 4719,4725 ----
        last_command_exit_value = rc;
        rc = run_exit_trap ();
+ #if defined (PROCESS_SUBSTITUTION)
+       unlink_fifo_list ();
+ #endif
        exit (rc);
      }
*** ../bash-3.2-patched/subst.h	Tue Sep 19 08:34:41 2006
--- subst.h	Wed Jan 10 09:46:47 2007
***************
*** 223,226 ****
--- 223,227 ----
  extern char *pat_subst __P((char *, char *, char *, int));
  
+ extern int fifos_pending __P((void));
  extern void unlink_fifo_list __P((void));

*** ../bash-3.2/patchlevel.h	Thu Apr 13 08:31:04 2006
--- patchlevel.h	Mon Oct 16 14:22:54 2006
***************
*** 26,30 ****
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 14
  
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 15
  
  #endif /* _PATCHLEVEL_H_ */


--- NEW FILE bash32-016 ---
			     BASH PATCH REPORT
			     =================

Bash-Release: 3.2
Patch-ID: bash32-016

Bug-Reported-by: Peter Volkov <torre_cremata at mail.ru>
Bug-Reference-ID: <1171795523.8021.18.camel at localhost>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-02/msg00054.html

Bug-Description:

When moving the cursor, bash sometimes misplaces the cursor when the prompt
contains two or more multibyte characters.  The particular circumstance that
uncovered the problem was having the (multibyte) current directory name in
the prompt string.

Patch:

*** ../bash-3.2/lib/readline/display.c	Fri Jan 19 13:34:50 2007
--- lib/readline/display.c	Sat Mar 10 17:25:44 2007
***************
*** 1745,1749 ****
      {
        dpos = _rl_col_width (data, 0, new);
!       if (dpos > prompt_last_invisible)		/* XXX - don't use woff here */
  	{
  	  dpos -= woff;
--- 1745,1752 ----
      {
        dpos = _rl_col_width (data, 0, new);
!       /* Use NEW when comparing against the last invisible character in the
! 	 prompt string, since they're both buffer indices and DPOS is a
! 	 desired display position. */
!       if (new > prompt_last_invisible)		/* XXX - don't use woff here */
  	{
  	  dpos -= woff;
*** ../bash-3.2/patchlevel.h	Thu Apr 13 08:31:04 2006
--- patchlevel.h	Mon Oct 16 14:22:54 2006
***************
*** 26,30 ****
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 15
  
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 16
  
  #endif /* _PATCHLEVEL_H_ */


--- NEW FILE bash32-017 ---
			     BASH PATCH REPORT
			     =================

Bash-Release: 3.2
Patch-ID: bash32-017

Bug-Reported-by: Peter Volkov <torre_cremata at mail.ru>
Bug-Reference-ID: <1173636022.7039.36.camel at localhost>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2007-03/msg00039.html

Bug-Description:

When restoring the original prompt after finishing an incremental search,
bash sometimes places the cursor incorrectly if the primary prompt contains
invisible characters.

Patch:

*** ../bash-3.2.16/lib/readline/display.c	Fri Apr 20 13:30:16 2007
--- lib/readline/display.c	Fri Apr 20 15:17:01 2007
***************
*** 1599,1604 ****
  	  if (temp > 0)
  	    {
  	      _rl_output_some_chars (nfd, temp);
! 	      _rl_last_c_pos += _rl_col_width (nfd, 0, temp);;
  	    }
  	}
--- 1599,1618 ----
  	  if (temp > 0)
  	    {
+ 	      /* If nfd begins at the prompt, or before the invisible
+ 		 characters in the prompt, we need to adjust _rl_last_c_pos
+ 		 in a multibyte locale to account for the wrap offset and
+ 		 set cpos_adjusted accordingly. */
  	      _rl_output_some_chars (nfd, temp);
! 	      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
! 		{
!                   _rl_last_c_pos += _rl_col_width (nfd, 0, temp);
!                   if (current_line == 0 && wrap_offset &&  ((nfd - new) <= prompt_last_invisible))
! 		    {
! 		      _rl_last_c_pos -= wrap_offset;
! 		      cpos_adjusted = 1;
! 		    }
! 		}
!               else
!                 _rl_last_c_pos += temp;
  	    }
  	}
***************
*** 1608,1613 ****
--- 1622,1639 ----
  	  if (temp > 0)
  	    {
+ 	      /* If nfd begins at the prompt, or before the invisible
+ 		 characters in the prompt, we need to adjust _rl_last_c_pos
+ 		 in a multibyte locale to account for the wrap offset and
+ 		 set cpos_adjusted accordingly. */
  	      _rl_output_some_chars (nfd, temp);
  	      _rl_last_c_pos += col_temp;		/* XXX */
+ 	      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+ 		{
+ 		  if (current_line == 0 && wrap_offset &&  ((nfd - new) <= prompt_last_invisible))
+ 		    {
+ 		      _rl_last_c_pos -= wrap_offset;
+ 		      cpos_adjusted = 1;
+ 		    }
+ 		}
  	    }
  	  lendiff = (oe - old) - (ne - new);
*** ../bash-3.2/patchlevel.h	Thu Apr 13 08:31:04 2006
--- patchlevel.h	Mon Oct 16 14:22:54 2006
***************
*** 26,30 ****
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 16
  
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 17
  
  #endif /* _PATCHLEVEL_H_ */


--- NEW FILE bash32-018 ---
			     BASH PATCH REPORT
			     =================

Bash-Release: 3.2
Patch-ID: bash32-018

Bug-Reported-by:	osicka at post.cz
Bug-Reference-ID:	<228.177-19682-1132061412-1179356692 at post.cz>
Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2007-05/msg00061.html

Bug-Description:

In certain cases, bash can lose the saved status of a background job, though
it should still be reported by `wait'.  Bash can also loop infinitely after
creating and waiting for 4096 jobs.

Patch:

*** ../bash-20070510/jobs.c	Thu Mar  8 16:05:50 2007
--- jobs.c	Fri May 18 11:40:14 2007
***************
*** 784,792 ****
      {
        old = js.j_firstj++;
        while (js.j_firstj != old)
  	{
  	  if (js.j_firstj >= js.j_jobslots)
  	    js.j_firstj = 0;
! 	  if (jobs[js.j_firstj])
  	    break;
  	  js.j_firstj++;
--- 784,794 ----
      {
        old = js.j_firstj++;
+       if (old >= js.j_jobslots)
+ 	old = js.j_jobslots - 1;
        while (js.j_firstj != old)
  	{
  	  if (js.j_firstj >= js.j_jobslots)
  	    js.j_firstj = 0;
! 	  if (jobs[js.j_firstj] || js.j_firstj == old)	/* needed if old == 0 */
  	    break;
  	  js.j_firstj++;
***************
*** 798,806 ****
      {
        old = js.j_lastj--;
        while (js.j_lastj != old)
  	{
  	  if (js.j_lastj < 0)
  	    js.j_lastj = js.j_jobslots - 1;
! 	  if (jobs[js.j_lastj])
  	    break;
  	  js.j_lastj--;
--- 800,810 ----
      {
        old = js.j_lastj--;
+       if (old < 0)
+ 	old = 0;
        while (js.j_lastj != old)
  	{
  	  if (js.j_lastj < 0)
  	    js.j_lastj = js.j_jobslots - 1;
! 	  if (jobs[js.j_lastj] || js.j_lastj == old)	/* needed if old == js.j_jobslots */
  	    break;
  	  js.j_lastj--;
***************
*** 964,968 ****
    realloc_jobs_list ();
  
!   return (js.j_lastj);
  }
  
--- 975,983 ----
    realloc_jobs_list ();
  
! #ifdef DEBUG
!   itrace("compact_jobs_list: returning %d", (js.j_lastj || jobs[js.j_lastj]) ? js.j_lastj + 1 : 0);
! #endif
! 
!   return ((js.j_lastj || jobs[js.j_lastj]) ? js.j_lastj + 1 : 0);
  }
  
*** ../bash-3.2/patchlevel.h	Thu Apr 13 08:31:04 2006
--- patchlevel.h	Mon Oct 16 14:22:54 2006
***************
*** 26,30 ****
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 17
  
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 18
  
  #endif /* _PATCHLEVEL_H_ */


--- NEW FILE bash32-019 ---
			     BASH PATCH REPORT
			     =================

Bash-Release: 3.2
Patch-ID: bash32-019

Bug-Reported-by:	Thomas Loeber <ifp at loeber1.de>
Bug-Reference-ID:	<200703082223.08919.ifp at loeber1.de>
Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2007-03/msg00036.html

Bug-Description:

When rl_read_key returns -1, indicating that bash's controlling terminal
has been invalidated for some reason (e.g., receiving a SIGHUP), the error
status was not reported correctly to the caller.  This could cause input
loops. 

Patch:

*** ../bash-3.2-patched/lib/readline/complete.c	Fri Jul 28 11:35:49 2006
--- lib/readline/complete.c	Tue Mar 13 08:50:16 2007
***************
*** 429,433 ****
        if (c == 'n' || c == 'N' || c == RUBOUT)
  	return (0);
!       if (c == ABORT_CHAR)
  	_rl_abort_internal ();
        if (for_pager && (c == NEWLINE || c == RETURN))
--- 440,444 ----
        if (c == 'n' || c == 'N' || c == RUBOUT)
  	return (0);
!       if (c == ABORT_CHAR || c < 0)
  	_rl_abort_internal ();
        if (for_pager && (c == NEWLINE || c == RETURN))
*** ../bash-3.2-patched/lib/readline/input.c	Wed Aug 16 15:15:16 2006
--- lib/readline/input.c	Wed May  2 16:07:59 2007
***************
*** 514,518 ****
       int size;
  {
!   int mb_len = 0;
    size_t mbchar_bytes_length;
    wchar_t wc;
--- 522,526 ----
       int size;
  {
!   int mb_len, c;
    size_t mbchar_bytes_length;
    wchar_t wc;
***************
*** 521,531 ****
    memset(&ps, 0, sizeof (mbstate_t));
    memset(&ps_back, 0, sizeof (mbstate_t));
!   
    while (mb_len < size)
      {
        RL_SETSTATE(RL_STATE_MOREINPUT);
!       mbchar[mb_len++] = rl_read_key ();
        RL_UNSETSTATE(RL_STATE_MOREINPUT);
  
        mbchar_bytes_length = mbrtowc (&wc, mbchar, mb_len, &ps);
        if (mbchar_bytes_length == (size_t)(-1))
--- 529,545 ----
    memset(&ps, 0, sizeof (mbstate_t));
    memset(&ps_back, 0, sizeof (mbstate_t));
! 
!   mb_len = 0;  
    while (mb_len < size)
      {
        RL_SETSTATE(RL_STATE_MOREINPUT);
!       c = rl_read_key ();
        RL_UNSETSTATE(RL_STATE_MOREINPUT);
  
+       if (c < 0)
+ 	break;
+ 
+       mbchar[mb_len++] = c;
+ 
        mbchar_bytes_length = mbrtowc (&wc, mbchar, mb_len, &ps);
        if (mbchar_bytes_length == (size_t)(-1))
***************
*** 565,569 ****
    c = first;
    memset (mb, 0, mlen);
!   for (i = 0; i < mlen; i++)
      {
        mb[i] = (char)c;
--- 579,583 ----
    c = first;
    memset (mb, 0, mlen);
!   for (i = 0; c >= 0 && i < mlen; i++)
      {
        mb[i] = (char)c;
*** ../bash-3.2-patched/lib/readline/isearch.c	Mon Dec 26 17:18:53 2005
--- lib/readline/isearch.c	Fri Mar  9 14:30:59 2007
***************
*** 328,333 ****
  
    f = (rl_command_func_t *)NULL;
!  
!  /* Translate the keys we do something with to opcodes. */
    if (c >= 0 && _rl_keymap[c].type == ISFUNC)
      {
--- 328,340 ----
  
    f = (rl_command_func_t *)NULL;
! 
!   if (c < 0)
!     {
!       cxt->sflags |= SF_FAILED;
!       cxt->history_pos = cxt->last_found_line;
!       return -1;
!     }
! 
!   /* Translate the keys we do something with to opcodes. */
    if (c >= 0 && _rl_keymap[c].type == ISFUNC)
      {
*** ../bash-3.2-patched/lib/readline/misc.c	Mon Dec 26 17:20:46 2005
--- lib/readline/misc.c	Fri Mar  9 14:44:11 2007
***************
*** 147,150 ****
--- 147,152 ----
  	  rl_clear_message ();
  	  RL_UNSETSTATE(RL_STATE_NUMERICARG);
+ 	  if (key < 0)
+ 	    return -1;
  	  return (_rl_dispatch (key, _rl_keymap));
  	}
*** ../bash-3.2-patched/lib/readline/readline.c	Wed Aug 16 15:00:36 2006
--- lib/readline/readline.c	Fri Mar  9 14:47:24 2007
***************
*** 646,649 ****
--- 669,677 ----
      {
        nkey = _rl_subseq_getchar (cxt->okey);
+       if (nkey < 0)
+ 	{
+ 	  _rl_abort_internal ();
+ 	  return -1;
+ 	}
        r = _rl_dispatch_subseq (nkey, cxt->dmap, cxt->subseq_arg);
        cxt->flags |= KSEQ_DISPATCHED;
*** ../bash-3.2-patched/lib/readline/text.c	Fri Jul 28 11:55:27 2006
--- lib/readline/text.c	Sun Mar 25 13:41:38 2007
***************
*** 858,861 ****
--- 864,870 ----
    RL_UNSETSTATE(RL_STATE_MOREINPUT);
  
+   if (c < 0)
+     return -1;
+ 
  #if defined (HANDLE_SIGNALS)
    if (RL_ISSTATE (RL_STATE_CALLBACK) == 0)
***************
*** 1521,1524 ****
--- 1530,1536 ----
    mb_len = _rl_read_mbchar (mbchar, MB_LEN_MAX);
  
+   if (mb_len <= 0)
+     return -1;
+ 
    if (count < 0)
      return (_rl_char_search_internal (-count, bdir, mbchar, mb_len));
***************
*** 1537,1540 ****
--- 1549,1555 ----
    RL_UNSETSTATE(RL_STATE_MOREINPUT);
  
+   if (c < 0)
+     return -1;
+ 
    if (count < 0)
      return (_rl_char_search_internal (-count, bdir, c));
*** ../bash-3.2-patched/lib/readline/vi_mode.c	Sat Jul 29 16:42:28 2006
--- lib/readline/vi_mode.c	Fri Mar  9 15:02:11 2007
***************
*** 887,890 ****
--- 887,897 ----
    c = rl_read_key ();
    RL_UNSETSTATE(RL_STATE_MOREINPUT);
+ 
+   if (c < 0)
+     {
+       *nextkey = 0;
+       return -1;
+     }
+ 
    *nextkey = c;
  
***************
*** 903,906 ****
--- 910,918 ----
  	  c = rl_read_key ();	/* real command */
  	  RL_UNSETSTATE(RL_STATE_MOREINPUT);
+ 	  if (c < 0)
+ 	    {
+ 	      *nextkey = 0;
+ 	      return -1;
+ 	    }
  	  *nextkey = c;
  	}
***************
*** 1225,1236 ****
       _rl_callback_generic_arg *data;
  {
  #if defined (HANDLE_MULTIBYTE)
!   _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);
  #else
    RL_SETSTATE(RL_STATE_MOREINPUT);
!   _rl_vi_last_search_char = rl_read_key ();
    RL_UNSETSTATE(RL_STATE_MOREINPUT);
  #endif
  
    _rl_callback_func = 0;
    _rl_want_redisplay = 1;
--- 1243,1262 ----
       _rl_callback_generic_arg *data;
  {
+   int c;
  #if defined (HANDLE_MULTIBYTE)
!   c = _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);
  #else
    RL_SETSTATE(RL_STATE_MOREINPUT);
!   c = rl_read_key ();
    RL_UNSETSTATE(RL_STATE_MOREINPUT);
  #endif
  
+   if (c <= 0)
+     return -1;
+ 
+ #if !defined (HANDLE_MULTIBYTE)
+   _rl_vi_last_search_char = c;
+ #endif
+ 
    _rl_callback_func = 0;
    _rl_want_redisplay = 1;
***************
*** 1248,1251 ****
--- 1274,1278 ----
       int count, key;
  {
+   int c;
  #if defined (HANDLE_MULTIBYTE)
    static char *target;
***************
*** 1294,1302 ****
  	{
  #if defined (HANDLE_MULTIBYTE)
! 	  _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);
  #else
  	  RL_SETSTATE(RL_STATE_MOREINPUT);
! 	  _rl_vi_last_search_char = rl_read_key ();
  	  RL_UNSETSTATE(RL_STATE_MOREINPUT);
  #endif
  	}
--- 1321,1335 ----
  	{
  #if defined (HANDLE_MULTIBYTE)
! 	  c = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);
! 	  if (c <= 0)
! 	    return -1;
! 	  _rl_vi_last_search_mblen = c;
  #else
  	  RL_SETSTATE(RL_STATE_MOREINPUT);
! 	  c = rl_read_key ();
  	  RL_UNSETSTATE(RL_STATE_MOREINPUT);
+ 	  if (c < 0)
+ 	    return -1;
+ 	  _rl_vi_last_search_char = c;
  #endif
  	}
***************
*** 1468,1471 ****
--- 1501,1507 ----
    RL_UNSETSTATE(RL_STATE_MOREINPUT);
  
+   if (c < 0)
+     return -1;
+ 
  #if defined (HANDLE_MULTIBYTE)
    if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
***************
*** 1486,1489 ****
--- 1522,1528 ----
    _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX);
  
+   if (c < 0)
+     return -1;
+ 
    _rl_callback_func = 0;
    _rl_want_redisplay = 1;
***************
*** 1517,1520 ****
--- 1556,1562 ----
      _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX);
  
+   if (c < 0)
+     return -1;
+ 
    return (_rl_vi_change_char (count, c, mb));
  }
***************
*** 1651,1655 ****
    RL_UNSETSTATE(RL_STATE_MOREINPUT);
  
!   if (ch < 'a' || ch > 'z')
      {
        rl_ding ();
--- 1693,1697 ----
    RL_UNSETSTATE(RL_STATE_MOREINPUT);
  
!   if (ch < 0 || ch < 'a' || ch > 'z')	/* make test against 0 explicit */
      {
        rl_ding ();
***************
*** 1703,1707 ****
        return 0;
      }
!   else if (ch < 'a' || ch > 'z')
      {
        rl_ding ();
--- 1745,1749 ----
        return 0;
      }
!   else if (ch < 0 || ch < 'a' || ch > 'z')	/* make test against 0 explicit */
      {
        rl_ding ();
*** ../bash-3.2/patchlevel.h	Thu Apr 13 08:31:04 2006
--- patchlevel.h	Mon Oct 16 14:22:54 2006
***************
*** 26,30 ****
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 18
  
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 19
  
  #endif /* _PATCHLEVEL_H_ */


--- NEW FILE bash32-020 ---
			     BASH PATCH REPORT
			     =================

Bash-Release: 3.2
Patch-ID: bash32-020

Bug-Reported-by:	Ian A Watson <WATSON_IAN_A at LILLY.COM>
Bug-Reference-ID:	<OFEC551808.69D02C7F-ON8525729A.0045708D-8525729A.0046150B at EliLilly.lilly.com>
Bug-Reference-URL:

Bug-Description:

In some cases of error processing, a jump back to the top-level processing
loop from a builtin command  would leave the shell in an inconsistent state.

Patch:

*** ../bash-3.2-patched/sig.c	Wed Jan 25 14:57:59 2006
--- sig.c	Sat Mar 10 11:11:30 2007
***************
*** 351,354 ****
--- 351,373 ----
  #undef XHANDLER
  
+ /* Run some of the cleanups that should be performed when we run
+    jump_to_top_level from a builtin command context.  XXX - might want to
+    also call reset_parser here. */
+ void
+ top_level_cleanup ()
+ {
+   /* Clean up string parser environment. */
+   while (parse_and_execute_level)
+     parse_and_execute_cleanup ();
+ 
+ #if defined (PROCESS_SUBSTITUTION)
+   unlink_fifo_list ();
+ #endif /* PROCESS_SUBSTITUTION */
+ 
+   run_unwind_protects ();
+   loop_level = continuing = breaking = 0;
+   return_catch_flag = 0;
+ }
+ 
  /* What to do when we've been interrupted, and it is safe to handle it. */
  void
*** ../bash-3.2-patched/sig.h	Wed Jan 25 14:50:27 2006
--- sig.h	Sat Mar 10 11:14:18 2007
***************
*** 122,125 ****
--- 122,126 ----
  extern void initialize_terminating_signals __P((void));
  extern void reset_terminating_signals __P((void));
+ extern void top_level_cleanup __P((void));
  extern void throw_to_top_level __P((void));
  extern void jump_to_top_level __P((int)) __attribute__((__noreturn__));
*** ../bash-3.2-patched/builtins/common.c	Tue Apr  3 16:47:13 2007
--- builtins/common.c	Mon Apr 30 15:01:33 2007
***************
*** 132,135 ****
--- 132,136 ----
      {
        builtin_error (_("too many arguments"));
+       top_level_cleanup ();
        jump_to_top_level (DISCARD);
      }
***************
*** 396,400 ****
  	    throw_to_top_level ();
  	  else
! 	    jump_to_top_level (DISCARD);
  	}
        no_args (list->next);
--- 410,417 ----
  	    throw_to_top_level ();
  	  else
! 	    {
! 	      top_level_cleanup ();
! 	      jump_to_top_level (DISCARD);
! 	    }
  	}
        no_args (list->next);
*** ../bash-3.2-patched/subst.c	Tue Apr  3 16:47:19 2007
--- subst.c	Tue Jul 17 09:45:11 2007
***************
*** 1279,1283 ****
        if (no_longjmp_on_fatal_error == 0)
  	{			/* { */
! 	  report_error ("bad substitution: no closing `%s' in %s", "}", string);
  	  last_command_exit_value = EXECUTION_FAILURE;
  	  exp_jump_to_top_level (DISCARD);
--- 1290,1294 ----
        if (no_longjmp_on_fatal_error == 0)
  	{			/* { */
! 	  report_error (_("bad substitution: no closing `%s' in %s"), "}", string);
  	  last_command_exit_value = EXECUTION_FAILURE;
  	  exp_jump_to_top_level (DISCARD);
***************
*** 7662,7665 ****
--- 7706,7711 ----
    expand_no_split_dollar_star = 0;	/* XXX */
    expanding_redir = 0;
+ 
+   top_level_cleanup ();			/* from sig.c */
  
    jump_to_top_level (v);
***************
*** 7880,7884 ****
  	    {
  	      report_error (_("no match: %s"), tlist->word->word);
! 	      jump_to_top_level (DISCARD);
  	    }
  	  else if (allow_null_glob_expansion == 0)
--- 7927,7931 ----
  	    {
  	      report_error (_("no match: %s"), tlist->word->word);
! 	      exp_jump_to_top_level (DISCARD);
  	    }
  	  else if (allow_null_glob_expansion == 0)
*** ../bash-3.2-patched/arrayfunc.c	Thu Jul 27 09:37:59 2006
--- arrayfunc.c	Thu May 31 11:55:46 2007
***************
*** 619,622 ****
--- 619,624 ----
      {
        last_command_exit_value = EXECUTION_FAILURE;
+ 
+       top_level_cleanup ();      
        jump_to_top_level (DISCARD);
      }
*** ../bash-3.2-patched/expr.c	Wed Dec 28 17:47:03 2005
--- expr.c	Tue Apr 24 14:17:59 2007
***************
*** 930,933 ****
--- 930,934 ----
  	{
  	  expr_unwind ();
+ 	  top_level_cleanup ();
  	  jump_to_top_level (DISCARD);
  	}
*** ../bash-3.2-patched/variables.c	Fri Sep  8 13:33:32 2006
--- variables.c	Tue Jul 17 09:54:59 2007
***************
*** 1822,1830 ****
  	  lval = evalexp (oval, &expok);	/* ksh93 seems to do this */
  	  if (expok == 0)
! 	    jump_to_top_level (DISCARD);
  	}
        rval = evalexp (value, &expok);
        if (expok == 0)
! 	jump_to_top_level (DISCARD);
        if (flags & ASS_APPEND)
  	rval += lval;
--- 1855,1869 ----
  	  lval = evalexp (oval, &expok);	/* ksh93 seems to do this */
  	  if (expok == 0)
! 	    {
! 	      top_level_cleanup ();
! 	      jump_to_top_level (DISCARD);
! 	    }
  	}
        rval = evalexp (value, &expok);
        if (expok == 0)
! 	{
! 	  top_level_cleanup ();
! 	  jump_to_top_level (DISCARD);
! 	}
        if (flags & ASS_APPEND)
  	rval += lval;
*** ../bash-3.2/patchlevel.h	Thu Apr 13 08:31:04 2006
--- patchlevel.h	Mon Oct 16 14:22:54 2006
***************
*** 26,30 ****
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 19
  
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 20
  
  #endif /* _PATCHLEVEL_H_ */


--- NEW FILE bash32-021 ---
			     BASH PATCH REPORT
			     =================

Bash-Release: 3.2
Patch-ID: bash32-021

Bug-Reported-by:	BAGSHAW Paul RD-TECH-REN <paul.bagshaw at orange-ftgroup.com>
Bug-Reference-ID:	<941BA0BF46DB8F4983FF7C8AFE800BC205EA7D4B at ftrdmel3.rd.francetelecom.fr>
Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-bash/2007-03/msg00065.html

Bug-Description:

When the parser read a backslash-escaped character that would be treated
internally as an escape, it would double the number of escape characters.

Patch:

*** ../bash-3.2-patched/parse.y	Mon Oct 30 17:22:00 2006
--- parse.y	Sat Mar 24 17:13:20 2007
***************
*** 3377,3381 ****
  	{
  	  pass_next_character = 0;
! 	  goto got_character;
  	}
  
--- 3377,3381 ----
  	{
  	  pass_next_character = 0;
! 	  goto got_escaped_character;
  	}
  
***************
*** 3651,3660 ****
      got_character:
  
-       all_digit_token &= DIGIT (character);
-       dollar_present |= character == '$';
- 
        if (character == CTLESC || character == CTLNUL)
  	token[token_index++] = CTLESC;
  
        token[token_index++] = character;
  
--- 3651,3662 ----
      got_character:
  
        if (character == CTLESC || character == CTLNUL)
  	token[token_index++] = CTLESC;
  
+     got_escaped_character:
+ 
+       all_digit_token &= DIGIT (character);
+       dollar_present |= character == '$';
+ 
        token[token_index++] = character;
  
*** ../bash-3.2/patchlevel.h	Thu Apr 13 08:31:04 2006
--- patchlevel.h	Mon Oct 16 14:22:54 2006
***************
*** 26,30 ****
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 20
  
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 21
  
  #endif /* _PATCHLEVEL_H_ */


--- NEW FILE bash32-022 ---
			     BASH PATCH REPORT
			     =================

Bash-Release: 3.2
Patch-ID: bash32-022

Bug-Reported-by:	Chet Ramey <chet.ramey at cwru.edu>
Bug-Reference-ID:
Bug-Reference-URL:

Bug-Description:

POSIX specifies that the `read' builtin invoked from an interative shell
must prompt with $PS2 when a line is continued using a backslash while
reading from a terminal.

Patch:

*** ../bash-3.2-patched/builtins/read.def	Tue Sep 19 08:45:48 2006
--- builtins/read.def	Thu May 24 16:03:30 2007
***************
*** 128,133 ****
  {
    register char *varname;
!   int size, i, nr, pass_next, saw_escape, eof, opt, retval, code;
!   int input_is_tty, input_is_pipe, unbuffered_read;
    int raw, edit, nchars, silent, have_timeout, fd;
    unsigned int tmout;
--- 131,136 ----
  {
    register char *varname;
!   int size, i, nr, pass_next, saw_escape, eof, opt, retval, code, print_ps2;
!   int input_is_tty, input_is_pipe, unbuffered_read, skip_ctlesc, skip_ctlnul;
    int raw, edit, nchars, silent, have_timeout, fd;
    unsigned int tmout;
***************
*** 135,139 ****
    char c;
    char *input_string, *orig_input_string, *ifs_chars, *prompt, *arrayname;
!   char *e, *t, *t1;
    struct stat tsb;
    SHELL_VAR *var;
--- 138,142 ----
    char c;
    char *input_string, *orig_input_string, *ifs_chars, *prompt, *arrayname;
!   char *e, *t, *t1, *ps2;
    struct stat tsb;
    SHELL_VAR *var;
***************
*** 149,152 ****
--- 152,156 ----
    USE_VAR(i);
    USE_VAR(pass_next);
+   USE_VAR(print_ps2);
    USE_VAR(saw_escape);
    USE_VAR(input_is_pipe);
***************
*** 164,167 ****
--- 168,172 ----
  #endif
    USE_VAR(list);
+   USE_VAR(ps2);
  
    i = 0;		/* Index into the string that we are reading. */
***************
*** 387,391 ****
  #endif
  
!   for (eof = retval = 0;;)
      {
  #if defined (READLINE)
--- 394,399 ----
  #endif
  
!   ps2 = 0;
!   for (print_ps2 = eof = retval = 0;;)
      {
  #if defined (READLINE)
***************
*** 413,416 ****
--- 421,433 ----
  #endif
  
+       if (print_ps2)
+ 	{
+ 	  if (ps2 == 0)
+ 	    ps2 = get_string_value ("PS2");
+ 	  fprintf (stderr, "%s", ps2 ? ps2 : "");
+ 	  fflush (stderr);
+ 	  print_ps2 = 0;
+ 	}
+ 
        if (unbuffered_read)
  	retval = zread (fd, &c, 1);
***************
*** 441,445 ****
  	  pass_next = 0;
  	  if (c == '\n')
! 	    i--;		/* back up over the CTLESC */
  	  else
  	    goto add_char;
--- 458,466 ----
  	  pass_next = 0;
  	  if (c == '\n')
! 	    {
! 	      i--;		/* back up over the CTLESC */
! 	      if (interactive && input_is_tty && raw == 0)
! 		print_ps2 = 1;
! 	    }
  	  else
  	    goto add_char;
*** ../bash-3.2/patchlevel.h	Thu Apr 13 08:31:04 2006
--- patchlevel.h	Mon Oct 16 14:22:54 2006
***************
*** 26,30 ****
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 21
  
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 22
  
  #endif /* _PATCHLEVEL_H_ */


--- NEW FILE bash32-023 ---
			     BASH PATCH REPORT
			     =================

Bash-Release: 3.2
Patch-ID: bash32-023

Bug-Reported-by:	Chet Ramey <chet.ramey at cwru.edu>
Bug-Reference-ID:
Bug-Reference-URL:

Bug-Description:

When an error occurs during the pattern removal word expansion, the shell
can free unallocated memory or free memory multiple times.

Patch:

*** ../bash-3.2-patched/subst.c	Tue Apr  3 16:47:19 2007
--- subst.c	Tue Jul 17 09:45:11 2007
***************
*** 3975,3979 ****
      patstr++;
  
!   pattern = getpattern (patstr, quoted, 1);
  
    temp1 = (char *)NULL;		/* shut up gcc */
--- 4008,4016 ----
      patstr++;
  
!   /* Need to pass getpattern newly-allocated memory in case of expansion --
!      the expansion code will free the passed string on an error. */
!   temp1 = savestring (patstr);
!   pattern = getpattern (temp1, quoted, 1);
!   free (temp1);
  
    temp1 = (char *)NULL;		/* shut up gcc */
*** ../bash-3.2/patchlevel.h	Thu Apr 13 08:31:04 2006
--- patchlevel.h	Mon Oct 16 14:22:54 2006
***************
*** 26,30 ****
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 22
  
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 23
  
  #endif /* _PATCHLEVEL_H_ */


--- NEW FILE bash32-024 ---
			     BASH PATCH REPORT
			     =================

Bash-Release: 3.2
Patch-ID: bash32-024

Bug-Reported-by:	Peter Volkov <torre_cremata at mail.ru>
Bug-Reference-ID:	<1178376645.9063.25.camel at localhost>
Bug-Reference-URL:	http://bugs.gentoo.org/177095

Bug-Description:

The readline display code miscalculated the screen position when performing
a redisplay in which the new text occupies more screen space that the old,
but takes fewer bytes to do so (e.g., when replacing a shorter string
containing multibyte characters with a longer one containing only ASCII).

Patch:

*** ../bash-3.2-patched/lib/readline/display.c	Thu Apr 26 11:38:22 2007
--- lib/readline/display.c	Thu Jul 12 23:10:10 2007
***************
*** 1519,1527 ****
        /* Non-zero if we're increasing the number of lines. */
        int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin;
        /* Sometimes it is cheaper to print the characters rather than
  	 use the terminal's capabilities.  If we're growing the number
  	 of lines, make sure we actually cause the new line to wrap
  	 around on auto-wrapping terminals. */
!       if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl))
  	{
  	  /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and
--- 1568,1596 ----
        /* Non-zero if we're increasing the number of lines. */
        int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin;
+       /* If col_lendiff is > 0, implying that the new string takes up more
+ 	 screen real estate than the old, but lendiff is < 0, meaning that it
+ 	 takes fewer bytes, we need to just output the characters starting
+ 	 from the first difference.  These will overwrite what is on the
+ 	 display, so there's no reason to do a smart update.  This can really
+ 	 only happen in a multibyte environment. */
+       if (lendiff < 0)
+ 	{
+ 	  _rl_output_some_chars (nfd, temp);
+ 	  _rl_last_c_pos += _rl_col_width (nfd, 0, temp);
+ 	  /* If nfd begins before any invisible characters in the prompt,
+ 	     adjust _rl_last_c_pos to account for wrap_offset and set
+ 	     cpos_adjusted to let the caller know. */
+ 	  if (current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible))
+ 	    {
+ 	      _rl_last_c_pos -= wrap_offset;
+ 	      cpos_adjusted = 1;
+ 	    }
+ 	  return;
+ 	}
        /* Sometimes it is cheaper to print the characters rather than
  	 use the terminal's capabilities.  If we're growing the number
  	 of lines, make sure we actually cause the new line to wrap
  	 around on auto-wrapping terminals. */
!       else if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl))
  	{
  	  /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and
*** ../bash-3.2/patchlevel.h	Thu Apr 13 08:31:04 2006
--- patchlevel.h	Mon Oct 16 14:22:54 2006
***************
*** 26,30 ****
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 23
  
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 24
  
  #endif /* _PATCHLEVEL_H_ */


--- NEW FILE bash32-025 ---
			     BASH PATCH REPORT
			     =================

Bash-Release: 3.2
Patch-ID: bash32-025

Bug-Reported-by:	Tom Bjorkholm <tom.bjorkholm at ericsson.com>
Bug-Reference-ID:	<AEA1A32F001C6B4F98614B5B80D7647D01C075E9 at esealmw115.eemea.ericsson.se>
Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-readline/2007-04/msg00004.html

Bug-Description:

An off-by-one error in readline's input buffering caused readline to drop
each 511th character of buffered input (e.g., when pasting a large amount
of data into a terminal window).

Patch:

*** ../bash-3.2-patched/lib/readline/input.c	Wed Aug 16 15:15:16 2006
--- lib/readline/input.c	Tue Jul 17 09:24:21 2007
***************
*** 134,139 ****
  
    *key = ibuffer[pop_index++];
! 
    if (pop_index >= ibuffer_len)
      pop_index = 0;
  
--- 134,142 ----
  
    *key = ibuffer[pop_index++];
! #if 0
    if (pop_index >= ibuffer_len)
+ #else
+   if (pop_index > ibuffer_len)
+ #endif
      pop_index = 0;
  
***************
*** 251,255 ****
  	{
  	  k = (*rl_getc_function) (rl_instream);
! 	  rl_stuff_char (k);
  	  if (k == NEWLINE || k == RETURN)
  	    break;
--- 254,259 ----
  	{
  	  k = (*rl_getc_function) (rl_instream);
! 	  if (rl_stuff_char (k) == 0)
! 	    break;			/* some problem; no more room */
  	  if (k == NEWLINE || k == RETURN)
  	    break;
***************
*** 374,378 ****
--- 378,386 ----
      }
    ibuffer[push_index++] = key;
+ #if 0
    if (push_index >= ibuffer_len)
+ #else
+   if (push_index > ibuffer_len)
+ #endif
      push_index = 0;
  
*** ../bash-3.2/patchlevel.h	Thu Apr 13 08:31:04 2006
--- patchlevel.h	Mon Oct 16 14:22:54 2006
***************
*** 26,30 ****
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 24
  
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 25
  
  #endif /* _PATCHLEVEL_H_ */

readline-5.2-inv.patch:

--- NEW FILE readline-5.2-inv.patch ---
fix cursor position when prompt has one invisible character (#358231)

Written-by: Miroslav Lichvar <mlichvar at redhat.com>

--- bash-3.2/lib/readline/display.c.inv	2007-10-31 17:14:31.000000000 +0100
+++ bash-3.2/lib/readline/display.c	2007-10-31 17:15:00.000000000 +0100
@@ -943,7 +943,7 @@ rl_redisplay ()
 		  cpos_adjusted == 0 &&
 		  _rl_last_c_pos != o_cpos &&
 		  _rl_last_c_pos > wrap_offset &&
-		  o_cpos < prompt_last_invisible)
+		  o_cpos <= prompt_last_invisible)
 		_rl_last_c_pos -= wrap_offset;
 		  
 	      /* If this is the line with the prompt, we might need to


Index: bash.spec
===================================================================
RCS file: /cvs/pkgs/rpms/bash/F-7/bash.spec,v
retrieving revision 1.140
retrieving revision 1.141
diff -u -r1.140 -r1.141
--- bash.spec	12 Feb 2007 15:15:33 -0000	1.140
+++ bash.spec	26 Nov 2007 14:48:34 -0000	1.141
@@ -1,9 +1,9 @@
 Version: 3.2
 Name: bash
 Summary: The GNU Bourne Again shell (bash) version %{version}
-Release: 9%{?dist}
+Release: 19%{?dist}
 Group: System Environment/Shells
-License: GPL
+License: GPLv2+
 Url: http://www.gnu.org/software/bash
 Source0: ftp://ftp.gnu.org/gnu/bash/bash-%{version}.tar.gz
 Source2: ftp://ftp.gnu.org/gnu/bash/bash-doc-%{version}.tar.gz
@@ -20,6 +20,22 @@
 Patch7: ftp://ftp.gnu.org/gnu/bash/bash-3.2-patches/bash32-007
 Patch8: ftp://ftp.gnu.org/gnu/bash/bash-3.2-patches/bash32-008
 Patch9: ftp://ftp.gnu.org/gnu/bash/bash-3.2-patches/bash32-009
+Patch10: ftp://ftp.gnu.org/gnu/bash/bash-3.2-patches/bash32-010
+Patch11: ftp://ftp.gnu.org/gnu/bash/bash-3.2-patches/bash32-011
+Patch12: ftp://ftp.gnu.org/gnu/bash/bash-3.2-patches/bash32-012
+Patch13: ftp://ftp.gnu.org/gnu/bash/bash-3.2-patches/bash32-013
+Patch14: ftp://ftp.gnu.org/gnu/bash/bash-3.2-patches/bash32-014
+Patch15: ftp://ftp.gnu.org/gnu/bash/bash-3.2-patches/bash32-015
+Patch16: ftp://ftp.gnu.org/gnu/bash/bash-3.2-patches/bash32-016
+Patch17: ftp://ftp.gnu.org/gnu/bash/bash-3.2-patches/bash32-017
+Patch18: ftp://ftp.gnu.org/gnu/bash/bash-3.2-patches/bash32-018
+Patch19: ftp://ftp.gnu.org/gnu/bash/bash-3.2-patches/bash32-019
+Patch20: ftp://ftp.gnu.org/gnu/bash/bash-3.2-patches/bash32-020
+Patch21: ftp://ftp.gnu.org/gnu/bash/bash-3.2-patches/bash32-021
+Patch22: ftp://ftp.gnu.org/gnu/bash/bash-3.2-patches/bash32-022
+Patch23: ftp://ftp.gnu.org/gnu/bash/bash-3.2-patches/bash32-023
+Patch24: ftp://ftp.gnu.org/gnu/bash/bash-3.2-patches/bash32-024
+Patch25: ftp://ftp.gnu.org/gnu/bash/bash-3.2-patches/bash32-025
 # Other patches
 Patch100: bash-2.03-paths.patch
 Patch101: bash-2.02-security.patch
@@ -35,6 +51,11 @@
 Patch126: bash-setlocale.patch
 Patch130: bash-infotags.patch
 Patch131: bash-cond-rmatch.patch
+Patch132: bash-ulimit-m.patch
+Patch133: bash-3.2-rng.patch
+Patch134: readline-5.2-inv.patch
+Patch135: bash-3.2-286861.patch
+Patch136: bash-3.2-344411.patch
 Requires: mktemp
 Requires(post): ncurses
 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
@@ -63,6 +84,22 @@
 %patch7 -p0 -b .007
 %patch8 -p0 -b .008
 %patch9 -p0 -b .009
+%patch10 -p0 -b .010
+%patch11 -p0 -b .011
+%patch12 -p0 -b .012
+%patch13 -p0 -b .013
+%patch14 -p0 -b .014
+%patch15 -p0 -b .015
+%patch16 -p0 -b .016
+%patch17 -p0 -b .017
+%patch18 -p0 -b .018
+%patch19 -p0 -b .019
+%patch20 -p0 -b .020
+%patch21 -p0 -b .021
+%patch22 -p0 -b .022
+%patch23 -p0 -b .023
+%patch24 -p0 -b .024
+%patch25 -p0 -b .025
 
 # Other patches
 %patch100 -p1 -b .paths
@@ -79,6 +116,11 @@
 %patch126 -p1 -b .setlocale
 %patch130 -p1 -b .infotags
 %patch131 -p1 -b .cond-rmatch
+%patch132 -p1 -b .ulimit-m
+%patch133 -p1 -b .rng.patch
+%patch134 -p1 -b .readline-inv
+%patch135 -p1 -b .286861
+%patch136 -p1 -b .344411
 
 echo %{version} > _distribution
 echo %{release} > _patchlevel
@@ -182,9 +224,9 @@
 fi
 
 (while read line ; do
-  if [ $line = /bin/bash ]; then
+  if [ "$line" = "/bin/bash" ]; then
     HASBASH=1
-  elif [ $line = /bin/sh ]; then
+  elif [ "$line" = "/bin/sh" ]; then
     HASSH=1
   fi
  done
@@ -209,7 +251,7 @@
 %doc doc/FAQ doc/INTRO doc/article.ms
 %doc -P examples/bashdb/ examples/functions/ examples/misc/
 %doc -P examples/scripts.noah/ examples/scripts.v2/ examples/scripts/
-%doc -P examples/startup-files/ examples/complete/ examples/loadables/
+%doc -P examples/startup-files/ examples/complete/
 %config(noreplace) /etc/skel/.b*
 /bin/sh
 /bin/bash
@@ -220,6 +262,49 @@
 %doc doc/*.ps doc/*.0 doc/*.html doc/article.txt
 
 %changelog
+* Tue Nov 06 2007 Tomas Janousek <tjanouse at redhat.com> - 3.2-19
+- fix cursor position when prompt has one invisible character (#358231)
+- dropped examples/loadables/ from docs, since it wasn't possible to build them
+  anyway (#174380)
+- fix #286861: Wrong input confuses bash's arithmetic unit permanently
+- fix #344411: $RANDOM stays the same when job executed in the background
+
+* Fri Aug 31 2007 Pete Graner <pgraner at redhat.com> - 3.2-18
+- Added bash32-021 upstream official patch
+- Added bash32-025 upstream official patch
+- Added bash32-024 upstream official patch
+- Added bash32-023 upstream official patch
+- Added bash32-022 upstream official patch
+
+* Wed Aug 29 2007 Pete Graner <pgraner at redhat.com> - 3.2-17
+- Added bash32-018 upstream official patch
+- Added bash32-020 upstream official patch
+- Added bash32-019 upstream official patch
+
+* Thu Aug 23 2007 Pete Graner <pgraner at redhat.com> - 3.2-16
+- Rebuild
+
+* Mon Aug 20 2007 Pete Graner <pgraner at redhat.com> - 3.2-15
+- Update to the Improve bash $RANDOM pseudo RNG (bug #234906) 
+  now works with subshells and make $RANDOM on demand thus reducing the 
+  amount of AVCs thrown.
+
+* Thu Aug 16 2007 Pete Graner <pgraner at redhat.com> - 3.2-15
+- Changed spec file License to GPLv2+
+
+* Wed Aug 15 2007 Pete Graner <pgraner at redhat.com> - 3.2-13
+- Improve bash $RANDOM pseudo RNG (bug #234906)
+
+* Fri Jul 20 2007 Tim Waugh <twaugh at redhat.com> 3.2-12
+- Quote environment variables in the post scriptlet to prevent upgrade
+  failures (bug #249005).
+
+* Thu Jul  5 2007 Tim Waugh <twaugh at redhat.com> 3.2-11
+- Patchlevel 17 (bug #241647).
+
+* Wed Jul  4 2007 Tim Waugh <twaugh at redhat.com> 3.2-10
+- Clarification in the ulimit man page (bug #220657).
+
 * Mon Feb 12 2007 Tim Waugh <twaugh at redhat.com> 3.2-9
 - Rebuild to link with libtinfo instead of libncurses.
 




More information about the fedora-extras-commits mailing list