summaryrefslogtreecommitdiff
path: root/package/bash/bash32-010
diff options
context:
space:
mode:
authorBernhard Reutner-Fischer <rep.dot.nop@gmail.com>2007-06-25 11:17:52 +0000
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>2007-06-25 11:17:52 +0000
commit7e81360323d5543d438d31ddbbc567c439cec7a8 (patch)
tree60c8ad56f68afec5212adb3a6be538d6befecfba /package/bash/bash32-010
parentf7ce4eb03c9890052873e54fcd8018acee7b79ca (diff)
- pull some additional fixes from upstream
Diffstat (limited to 'package/bash/bash32-010')
-rw-r--r--package/bash/bash32-010207
1 files changed, 207 insertions, 0 deletions
diff --git a/package/bash/bash32-010 b/package/bash/bash32-010
new file mode 100644
index 000000000..88de5758f
--- /dev/null
+++ b/package/bash/bash32-010
@@ -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_ */