- pull some additional fixes from upstream
authorBernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Mon, 25 Jun 2007 11:17:52 +0000 (11:17 -0000)
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Mon, 25 Jun 2007 11:17:52 +0000 (11:17 -0000)
package/bash/bash32-010 [new file with mode: 0644]
package/bash/bash32-011 [new file with mode: 0644]
package/bash/bash32-012 [new file with mode: 0644]
package/bash/bash32-013 [new file with mode: 0644]
package/bash/bash32-014 [new file with mode: 0644]
package/bash/bash32-015 [new file with mode: 0644]
package/bash/bash32-016 [new file with mode: 0644]
package/bash/bash32-017 [new file with mode: 0644]

diff --git a/package/bash/bash32-010 b/package/bash/bash32-010
new file mode 100644 (file)
index 0000000..88de575
--- /dev/null
@@ -0,0 +1,207 @@
+                            BASH PATCH REPORT
+                            =================
+
+Bash-Release: 3.2
+Patch-ID: bash32-010
+
+Bug-Reported-by:       Ryan Waldron <rew@erebor.com>
+Bug-Reference-ID:      <20070119065603.546D011E9C@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_ */
diff --git a/package/bash/bash32-011 b/package/bash/bash32-011
new file mode 100644 (file)
index 0000000..c021f52
--- /dev/null
@@ -0,0 +1,138 @@
+                            BASH PATCH REPORT
+                            =================
+
+Bash-Release: 3.2
+Patch-ID: bash32-011
+
+Bug-Reported-by: Petr Sumbera <Petr.Sumbera@Sun.COM>
+Bug-Reference-ID: <45AF5F4B.1020800@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_ */
diff --git a/package/bash/bash32-012 b/package/bash/bash32-012
new file mode 100644 (file)
index 0000000..8d669d2
--- /dev/null
@@ -0,0 +1,96 @@
+                            BASH PATCH REPORT
+                            =================
+
+Bash-Release: 3.2
+Patch-ID: bash32-012
+
+Bug-Reported-by: John Wyman <JohnWyman@celink.com>
+Bug-Reference-ID: <5E7DEFC094C35044B87FAE761D9F0EE20143A3B7@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_ */
diff --git a/package/bash/bash32-013 b/package/bash/bash32-013
new file mode 100644 (file)
index 0000000..d47bc1a
--- /dev/null
@@ -0,0 +1,65 @@
+                            BASH PATCH REPORT
+                            =================
+
+Bash-Release: 3.2
+Patch-ID: bash32-013
+
+Bug-Reported-by: Magnus Svensson <msvensson@mysql.com>
+Bug-Reference-ID: <45BDC44D.80609@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_ */
diff --git a/package/bash/bash32-014 b/package/bash/bash32-014
new file mode 100644 (file)
index 0000000..b706505
--- /dev/null
@@ -0,0 +1,307 @@
+                            BASH PATCH REPORT
+                            =================
+
+Bash-Release: 3.2
+Patch-ID: bash32-014
+
+Bug-Reported-by: Brett Stahlman <brettstahlman@comcast.net>
+Bug-Reference-ID: <000701c72d29$a227e0e0$5ec7cf47@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_ */
diff --git a/package/bash/bash32-015 b/package/bash/bash32-015
new file mode 100644 (file)
index 0000000..d887f6e
--- /dev/null
@@ -0,0 +1,95 @@
+                            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_ */
diff --git a/package/bash/bash32-016 b/package/bash/bash32-016
new file mode 100644 (file)
index 0000000..a0f065a
--- /dev/null
@@ -0,0 +1,52 @@
+                            BASH PATCH REPORT
+                            =================
+
+Bash-Release: 3.2
+Patch-ID: bash32-016
+
+Bug-Reported-by: Peter Volkov <torre_cremata@mail.ru>
+Bug-Reference-ID: <1171795523.8021.18.camel@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_ */
diff --git a/package/bash/bash32-017 b/package/bash/bash32-017
new file mode 100644 (file)
index 0000000..99e5e70
--- /dev/null
@@ -0,0 +1,85 @@
+                            BASH PATCH REPORT
+                            =================
+
+Bash-Release: 3.2
+Patch-ID: bash32-017
+
+Bug-Reported-by: Peter Volkov <torre_cremata@mail.ru>
+Bug-Reference-ID: <1173636022.7039.36.camel@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_ */