lede-packages-rs

git clone git://archive.git.mtrnord.blog/MTRNord/lede-packages-rs.git
Log | Files | Refs | README | LICENSE

108-upstream-bash43-008.patch (3779B)


      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_ */