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
13 Some extended glob patterns incorrectly matched filenames with a leading
14 dot, regardless of the setting of the `dotglob' option.
16 Patch (apply with `patch -p0'):
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
26 return (pat[1] == LPAREN);
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
38 ! pe = pp + strlen (pp) - 1; /*(*/
41 ! if ((t = strchr (pp, '|')) == 0) /* easy case first */
44 r = skipname (pp, dname, flags); /*(*/
48 while (t = glob_patscan (pp, pe, '|'))
52 r = skipname (pp, dname, flags);
54 if (r == 0) /* if any pattern says not skip, we don't skip */
58 ! char *pp, *pe, *t, *se;
61 + negate = *pat == '!';
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)
71 + #if defined (HANDLE_MULTIBYTE)
72 + r = mbskipname (pp, dname, flags);
74 r = skipname (pp, dname, flags); /*(*/
80 + /* check every subpattern */
81 while (t = glob_patscan (pp, pe, '|'))
85 + #if defined (HANDLE_MULTIBYTE)
86 + r = mbskipname (pp, dname, flags);
88 r = skipname (pp, dname, flags);
91 if (r == 0) /* if any pattern says not skip, we don't skip */
96 ! if (pp == pe) /* glob_patscan might find end of pattern */
100 ! # if defined (HANDLE_MULTIBYTE)
101 ! r = mbskipname (pp, dname, flags); /*(*/
103 ! r = skipname (pp, dname, flags); /*(*/
112 ! /* glob_patscan might find end of pattern */
116 ! /* but if it doesn't then we didn't match a leading dot */
124 ! wchar_t *pp, *pe, *t, n;
128 ! pe = pp + wcslen (pp) - 1; /*(*/
131 ! if ((t = wcschr (pp, L'|')) == 0)
137 ! wchar_t *pp, *pe, *t, n, *se;
140 + negate = *pat == L'!';
142 ! se = pp + wcslen (pp) - 1; /*(*/
143 ! pe = glob_patscan_wc (pp, se, 0);
145 ! if (pe == se && *pe == ')' && (t = wcschr (pp, L'|')) == 0)
154 + /* check every subpattern */
155 while (t = glob_patscan_wc (pp, pe, '|'))
162 ! r = wchkname (pp, dname); /*(*/
166 return (wchkname (pat, dname));
170 ! /* but if it doesn't then we didn't match a leading dot */
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
178 looks for to find the patch level (for the sccs version string). */
180 ! #define PATCHLEVEL 7
182 #endif /* _PATCHLEVEL_H_ */
184 looks for to find the patch level (for the sccs version string). */
186 ! #define PATCHLEVEL 8
188 #endif /* _PATCHLEVEL_H_ */