summaryrefslogtreecommitdiff
path: root/debian/patches/bash43-008.diff
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/bash43-008.diff')
-rw-r--r--debian/patches/bash43-008.diff153
1 files changed, 153 insertions, 0 deletions
diff --git a/debian/patches/bash43-008.diff b/debian/patches/bash43-008.diff
new file mode 100644
index 0000000..d902c27
--- /dev/null
+++ b/debian/patches/bash43-008.diff
@@ -0,0 +1,153 @@
+# DP: bash43-008 upstream patch
+
+Bash-Release: 4.3
+Patch-ID: bash43-008
+
+Bug-Reported-by: Stephane Chazelas <stephane.chazelas@gmail.com>
+Bug-Reference-ID: <20140318135901.GB22158@chaz.gmail.com>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00098.html
+
+Bug-Description:
+
+Some extended glob patterns incorrectly matched filenames with a leading
+dot, regardless of the setting of the `dotglob' option.
+
+Patch (apply with `patch -p0'):
+
+Index: b/patchlevel.h
+===================================================================
+--- a/patchlevel.h
++++ b/patchlevel.h
+@@ -25,6 +25,6 @@
+ regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
+ looks for to find the patch level (for the sccs version string). */
+
+-#define PATCHLEVEL 7
++#define PATCHLEVEL 8
+
+ #endif /* _PATCHLEVEL_H_ */
+Index: b/lib/glob/glob.c
+===================================================================
+--- a/lib/glob/glob.c
++++ b/lib/glob/glob.c
+@@ -179,42 +179,50 @@
+ char *pat, *dname;
+ int flags;
+ {
+- char *pp, *pe, *t;
+- int n, r;
++ char *pp, *pe, *t, *se;
++ int n, r, negate;
+
++ negate = *pat == '!';
+ pp = pat + 2;
+- pe = pp + strlen (pp) - 1; /*(*/
+- if (*pe != ')')
+- return 0;
+- if ((t = strchr (pp, '|')) == 0) /* easy case first */
++ se = pp + strlen (pp) - 1; /* end of string */
++ pe = glob_patscan (pp, se, 0); /* end of extglob pattern (( */
++ /* we should check for invalid extglob pattern here */
++ /* if pe != se we have more of the pattern at the end of the extglob
++ pattern. Check the easy case first ( */
++ if (pe == se && *pe == ')' && (t = strchr (pp, '|')) == 0)
+ {
+ *pe = '\0';
++#if defined (HANDLE_MULTIBYTE)
++ r = mbskipname (pp, dname, flags);
++#else
+ r = skipname (pp, dname, flags); /*(*/
++#endif
+ *pe = ')';
+ return r;
+ }
++
++ /* check every subpattern */
+ while (t = glob_patscan (pp, pe, '|'))
+ {
+ n = t[-1];
+ t[-1] = '\0';
++#if defined (HANDLE_MULTIBYTE)
++ r = mbskipname (pp, dname, flags);
++#else
+ r = skipname (pp, dname, flags);
++#endif
+ t[-1] = n;
+ if (r == 0) /* if any pattern says not skip, we don't skip */
+ return r;
+ pp = t;
+ } /*(*/
+
+- if (pp == pe) /* glob_patscan might find end of pattern */
++ /* glob_patscan might find end of pattern */
++ if (pp == se)
+ return r;
+
+- *pe = '\0';
+-# if defined (HANDLE_MULTIBYTE)
+- r = mbskipname (pp, dname, flags); /*(*/
+-# else
+- r = skipname (pp, dname, flags); /*(*/
+-# endif
+- *pe = ')';
+- return r;
++ /* but if it doesn't then we didn't match a leading dot */
++ return 0;
+ }
+ #endif
+
+@@ -277,20 +285,23 @@
+ int flags;
+ {
+ #if EXTENDED_GLOB
+- wchar_t *pp, *pe, *t, n;
+- int r;
++ wchar_t *pp, *pe, *t, n, *se;
++ int r, negate;
+
++ negate = *pat == L'!';
+ pp = pat + 2;
+- pe = pp + wcslen (pp) - 1; /*(*/
+- if (*pe != L')')
+- return 0;
+- if ((t = wcschr (pp, L'|')) == 0)
++ se = pp + wcslen (pp) - 1; /*(*/
++ pe = glob_patscan_wc (pp, se, 0);
++
++ if (pe == se && *pe == ')' && (t = wcschr (pp, L'|')) == 0)
+ {
+ *pe = L'\0';
+ r = wchkname (pp, dname); /*(*/
+ *pe = L')';
+ return r;
+ }
++
++ /* check every subpattern */
+ while (t = glob_patscan_wc (pp, pe, '|'))
+ {
+ n = t[-1];
+@@ -305,10 +316,8 @@
+ if (pp == pe) /* glob_patscan_wc might find end of pattern */
+ return r;
+
+- *pe = L'\0';
+- r = wchkname (pp, dname); /*(*/
+- *pe = L')';
+- return r;
++ /* but if it doesn't then we didn't match a leading dot */
++ return 0;
+ #else
+ return (wchkname (pat, dname));
+ #endif
+Index: b/lib/glob/gmisc.c
+===================================================================
+--- a/lib/glob/gmisc.c
++++ b/lib/glob/gmisc.c
+@@ -210,6 +210,7 @@
+ case '+':
+ case '!':
+ case '@':
++ case '?':
+ return (pat[1] == LPAREN);
+ default:
+ return 0;