- Patchlevel 17 (bug #241647).

This commit is contained in:
Tim Waugh 2007-07-05 09:06:48 +00:00
parent 95e06a29c5
commit b1304129de
9 changed files with 1065 additions and 1 deletions

View File

@ -1,7 +1,7 @@
Version: 3.2
Name: bash
Summary: The GNU Bourne Again shell (bash) version %{version}
Release: 10%{?dist}
Release: 11%{?dist}
Group: System Environment/Shells
License: GPL
Url: http://www.gnu.org/software/bash
@ -20,6 +20,14 @@ Patch6: ftp://ftp.gnu.org/gnu/bash/bash-3.2-patches/bash32-006
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
# Other patches
Patch100: bash-2.03-paths.patch
Patch101: bash-2.02-security.patch
@ -64,6 +72,14 @@ compliance over previous versions.
%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
# Other patches
%patch100 -p1 -b .paths
@ -222,6 +238,9 @@ fi
%doc doc/*.ps doc/*.0 doc/*.html doc/article.txt
%changelog
* Thu Jul 5 2007 Tim Waugh <twaugh@redhat.com> 3.2-11
- Patchlevel 17 (bug #241647).
* Wed Jul 4 2007 Tim Waugh <twaugh@redhat.com> 3.2-10
- Clarification in the ulimit man page (bug #220657).

207
bash32-010 Normal file
View File

@ -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_ */

138
bash32-011 Normal file
View File

@ -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_ */

96
bash32-012 Normal file
View File

@ -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_ */

65
bash32-013 Normal file
View File

@ -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_ */

307
bash32-014 Normal file
View File

@ -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_ */

95
bash32-015 Normal file
View File

@ -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_ */

52
bash32-016 Normal file
View File

@ -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_ */

85
bash32-017 Normal file
View File

@ -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_ */