squid: bump to 3.5.27
[feed/packages.git] / utils / bash / patches / 108-upstream-bash43-008.patch
1 BASH PATCH REPORT
2 =================
3
4 Bash-Release: 4.3
5 Patch-ID: bash43-008
6
7 Bug-Reported-by: Stephane Chazelas <stephane.chazelas@gmail.com>
8 Bug-Reference-ID: <20140318135901.GB22158@chaz.gmail.com>
9 Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00098.html
10
11 Bug-Description:
12
13 Some extended glob patterns incorrectly matched filenames with a leading
14 dot, regardless of the setting of the `dotglob' option.
15
16 Patch (apply with `patch -p0'):
17
18 --- a/lib/glob/gmisc.c
19 +++ b/lib/glob/gmisc.c
20 @@ -210,6 +210,7 @@ extglob_pattern_p (pat)
21 case '+':
22 case '!':
23 case '@':
24 + case '?':
25 return (pat[1] == LPAREN);
26 default:
27 return 0;
28 --- a/lib/glob/glob.c
29 +++ b/lib/glob/glob.c
30 @@ -179,42 +179,50 @@ extglob_skipname (pat, dname, flags)
31 char *pat, *dname;
32 int flags;
33 {
34 - char *pp, *pe, *t;
35 - int n, r;
36 + char *pp, *pe, *t, *se;
37 + int n, r, negate;
38
39 + negate = *pat == '!';
40 pp = pat + 2;
41 - pe = pp + strlen (pp) - 1; /*(*/
42 - if (*pe != ')')
43 - return 0;
44 - if ((t = strchr (pp, '|')) == 0) /* easy case first */
45 + se = pp + strlen (pp) - 1; /* end of string */
46 + pe = glob_patscan (pp, se, 0); /* end of extglob pattern (( */
47 + /* we should check for invalid extglob pattern here */
48 + /* if pe != se we have more of the pattern at the end of the extglob
49 + pattern. Check the easy case first ( */
50 + if (pe == se && *pe == ')' && (t = strchr (pp, '|')) == 0)
51 {
52 *pe = '\0';
53 +#if defined (HANDLE_MULTIBYTE)
54 + r = mbskipname (pp, dname, flags);
55 +#else
56 r = skipname (pp, dname, flags); /*(*/
57 +#endif
58 *pe = ')';
59 return r;
60 }
61 +
62 + /* check every subpattern */
63 while (t = glob_patscan (pp, pe, '|'))
64 {
65 n = t[-1];
66 t[-1] = '\0';
67 +#if defined (HANDLE_MULTIBYTE)
68 + r = mbskipname (pp, dname, flags);
69 +#else
70 r = skipname (pp, dname, flags);
71 +#endif
72 t[-1] = n;
73 if (r == 0) /* if any pattern says not skip, we don't skip */
74 return r;
75 pp = t;
76 } /*(*/
77
78 - if (pp == pe) /* glob_patscan might find end of pattern */
79 + /* glob_patscan might find end of pattern */
80 + if (pp == se)
81 return r;
82
83 - *pe = '\0';
84 -# if defined (HANDLE_MULTIBYTE)
85 - r = mbskipname (pp, dname, flags); /*(*/
86 -# else
87 - r = skipname (pp, dname, flags); /*(*/
88 -# endif
89 - *pe = ')';
90 - return r;
91 + /* but if it doesn't then we didn't match a leading dot */
92 + return 0;
93 }
94 #endif
95
96 @@ -277,20 +285,23 @@ wextglob_skipname (pat, dname, flags)
97 int flags;
98 {
99 #if EXTENDED_GLOB
100 - wchar_t *pp, *pe, *t, n;
101 - int r;
102 + wchar_t *pp, *pe, *t, n, *se;
103 + int r, negate;
104
105 + negate = *pat == L'!';
106 pp = pat + 2;
107 - pe = pp + wcslen (pp) - 1; /*(*/
108 - if (*pe != L')')
109 - return 0;
110 - if ((t = wcschr (pp, L'|')) == 0)
111 + se = pp + wcslen (pp) - 1; /*(*/
112 + pe = glob_patscan_wc (pp, se, 0);
113 +
114 + if (pe == se && *pe == ')' && (t = wcschr (pp, L'|')) == 0)
115 {
116 *pe = L'\0';
117 r = wchkname (pp, dname); /*(*/
118 *pe = L')';
119 return r;
120 }
121 +
122 + /* check every subpattern */
123 while (t = glob_patscan_wc (pp, pe, '|'))
124 {
125 n = t[-1];
126 @@ -305,10 +316,8 @@ wextglob_skipname (pat, dname, flags)
127 if (pp == pe) /* glob_patscan_wc might find end of pattern */
128 return r;
129
130 - *pe = L'\0';
131 - r = wchkname (pp, dname); /*(*/
132 - *pe = L')';
133 - return r;
134 + /* but if it doesn't then we didn't match a leading dot */
135 + return 0;
136 #else
137 return (wchkname (pat, dname));
138 #endif
139 --- a/patchlevel.h
140 +++ b/patchlevel.h
141 @@ -25,6 +25,6 @@
142 regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
143 looks for to find the patch level (for the sccs version string). */
144
145 -#define PATCHLEVEL 7
146 +#define PATCHLEVEL 8
147
148 #endif /* _PATCHLEVEL_H_ */