]> git.ipfire.org Git - ipfire-2.x.git/blame - src/patches/bash/bash43-008
readline: update to 8.0 (patchlevel 1)
[ipfire-2.x.git] / src / patches / bash / bash43-008
CommitLineData
d19c8267
AF
1 BASH PATCH REPORT
2 =================
3
4Bash-Release: 4.3
5Patch-ID: bash43-008
6
7Bug-Reported-by: Stephane Chazelas <stephane.chazelas@gmail.com>
8Bug-Reference-ID: <20140318135901.GB22158@chaz.gmail.com>
9Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00098.html
10
11Bug-Description:
12
13Some extended glob patterns incorrectly matched filenames with a leading
14dot, regardless of the setting of the `dotglob' option.
15
16Patch (apply with `patch -p0'):
17
18*** ../bash-4.3/lib/glob/gmisc.c 2013-10-28 14:45:25.000000000 -0400
19--- lib/glob/gmisc.c 2014-03-19 09:16:08.000000000 -0400
20***************
21*** 211,214 ****
22--- 211,215 ----
23 case '!':
24 case '@':
25+ case '?':
26 return (pat[1] == LPAREN);
27 default:
28*** ../bash-4.3/lib/glob/glob.c 2014-01-31 21:43:51.000000000 -0500
29--- lib/glob/glob.c 2014-03-20 09:01:26.000000000 -0400
30***************
31*** 180,202 ****
32 int flags;
33 {
34! char *pp, *pe, *t;
35! int n, r;
36
37 pp = pat + 2;
38! pe = pp + strlen (pp) - 1; /*(*/
39! if (*pe != ')')
40! return 0;
41! if ((t = strchr (pp, '|')) == 0) /* easy case first */
42 {
43 *pe = '\0';
44 r = skipname (pp, dname, flags); /*(*/
45 *pe = ')';
46 return r;
47 }
48 while (t = glob_patscan (pp, pe, '|'))
49 {
50 n = t[-1];
51 t[-1] = '\0';
52 r = skipname (pp, dname, flags);
53 t[-1] = n;
54 if (r == 0) /* if any pattern says not skip, we don't skip */
55--- 180,215 ----
56 int flags;
57 {
58! char *pp, *pe, *t, *se;
59! int n, r, negate;
60
61+ negate = *pat == '!';
62 pp = pat + 2;
63! se = pp + strlen (pp) - 1; /* end of string */
64! pe = glob_patscan (pp, se, 0); /* end of extglob pattern (( */
65! /* we should check for invalid extglob pattern here */
66! /* if pe != se we have more of the pattern at the end of the extglob
67! pattern. Check the easy case first ( */
68! if (pe == se && *pe == ')' && (t = strchr (pp, '|')) == 0)
69 {
70 *pe = '\0';
71+ #if defined (HANDLE_MULTIBYTE)
72+ r = mbskipname (pp, dname, flags);
73+ #else
74 r = skipname (pp, dname, flags); /*(*/
75+ #endif
76 *pe = ')';
77 return r;
78 }
79+
80+ /* check every subpattern */
81 while (t = glob_patscan (pp, pe, '|'))
82 {
83 n = t[-1];
84 t[-1] = '\0';
85+ #if defined (HANDLE_MULTIBYTE)
86+ r = mbskipname (pp, dname, flags);
87+ #else
88 r = skipname (pp, dname, flags);
89+ #endif
90 t[-1] = n;
91 if (r == 0) /* if any pattern says not skip, we don't skip */
92***************
93*** 205,219 ****
94 } /*(*/
95
96! if (pp == pe) /* glob_patscan might find end of pattern */
97 return r;
98
99! *pe = '\0';
100! # if defined (HANDLE_MULTIBYTE)
101! r = mbskipname (pp, dname, flags); /*(*/
102! # else
103! r = skipname (pp, dname, flags); /*(*/
104! # endif
105! *pe = ')';
106! return r;
107 }
108 #endif
109--- 218,227 ----
110 } /*(*/
111
112! /* glob_patscan might find end of pattern */
113! if (pp == se)
114 return r;
115
116! /* but if it doesn't then we didn't match a leading dot */
117! return 0;
118 }
119 #endif
120***************
121*** 278,289 ****
122 {
123 #if EXTENDED_GLOB
124! wchar_t *pp, *pe, *t, n;
125! int r;
126
127 pp = pat + 2;
128! pe = pp + wcslen (pp) - 1; /*(*/
129! if (*pe != L')')
130! return 0;
131! if ((t = wcschr (pp, L'|')) == 0)
132 {
133 *pe = L'\0';
134--- 286,298 ----
135 {
136 #if EXTENDED_GLOB
137! wchar_t *pp, *pe, *t, n, *se;
138! int r, negate;
139
140+ negate = *pat == L'!';
141 pp = pat + 2;
142! se = pp + wcslen (pp) - 1; /*(*/
143! pe = glob_patscan_wc (pp, se, 0);
144!
145! if (pe == se && *pe == ')' && (t = wcschr (pp, L'|')) == 0)
146 {
147 *pe = L'\0';
148***************
149*** 292,295 ****
150--- 301,306 ----
151 return r;
152 }
153+
154+ /* check every subpattern */
155 while (t = glob_patscan_wc (pp, pe, '|'))
156 {
157***************
158*** 306,313 ****
159 return r;
160
161! *pe = L'\0';
162! r = wchkname (pp, dname); /*(*/
163! *pe = L')';
164! return r;
165 #else
166 return (wchkname (pat, dname));
167--- 317,322 ----
168 return r;
169
170! /* but if it doesn't then we didn't match a leading dot */
171! return 0;
172 #else
173 return (wchkname (pat, dname));
174*** ../bash-4.3/patchlevel.h 2012-12-29 10:47:57.000000000 -0500
175--- patchlevel.h 2014-03-20 20:01:28.000000000 -0400
176***************
177*** 26,30 ****
178 looks for to find the patch level (for the sccs version string). */
179
180! #define PATCHLEVEL 7
181
182 #endif /* _PATCHLEVEL_H_ */
183--- 26,30 ----
184 looks for to find the patch level (for the sccs version string). */
185
186! #define PATCHLEVEL 8
187
188 #endif /* _PATCHLEVEL_H_ */