BASH PATCH REPORT ================= Bash-Release: 3.1 Patch-ID: bash31-015 Bug-Reported-by: Benoit Vila Bug-Reference-ID: <43FCA614.1090108@free.fr> Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2006-02/msg00058.html Bug-Description: A problem with the extended globbing code prevented dots from matching filenames when used in some extended matching patterns. Patch: *** ../bash-3.1-patched/lib/glob/sm_loop.c Sun Oct 16 21:21:04 2005 --- lib/glob/sm_loop.c Mon Feb 27 17:18:43 2006 *************** *** 639,643 **** CHAR *pnext; /* pointer to next sub-pattern */ CHAR *srest; /* pointer to rest of string */ ! int m1, m2; #if DEBUG_MATCHING --- 638,642 ---- CHAR *pnext; /* pointer to next sub-pattern */ CHAR *srest; /* pointer to rest of string */ ! int m1, m2, xflags; /* xflags = flags passed to recursive matches */ #if DEBUG_MATCHING *************** *** 645,648 **** --- 644,648 ---- fprintf(stderr, "extmatch: s = %s; se = %s\n", s, se); fprintf(stderr, "extmatch: p = %s; pe = %s\n", p, pe); + fprintf(stderr, "extmatch: flags = %d\n", flags); #endif *************** *** 678,683 **** multiple matches of the pattern. */ if (m1) ! m2 = (GMATCH (srest, se, prest, pe, flags) == 0) || ! (s != srest && GMATCH (srest, se, p - 1, pe, flags) == 0); if (m1 && m2) return (0); --- 678,687 ---- multiple matches of the pattern. */ if (m1) ! { ! /* if srest > s, we are not at start of string */ ! xflags = (srest > s) ? (flags & ~FNM_PERIOD) : flags; ! m2 = (GMATCH (srest, se, prest, pe, xflags) == 0) || ! (s != srest && GMATCH (srest, se, p - 1, pe, xflags) == 0); ! } if (m1 && m2) return (0); *************** *** 705,710 **** for ( ; srest <= se; srest++) { if (GMATCH (s, srest, psub, pnext - 1, flags) == 0 && ! GMATCH (srest, se, prest, pe, flags) == 0) return (0); } --- 709,716 ---- for ( ; srest <= se; srest++) { + /* if srest > s, we are not at start of string */ + xflags = (srest > s) ? (flags & ~FNM_PERIOD) : flags; if (GMATCH (s, srest, psub, pnext - 1, flags) == 0 && ! GMATCH (srest, se, prest, pe, xflags) == 0) return (0); } *************** *** 727,731 **** break; } ! if (m1 == 0 && GMATCH (srest, se, prest, pe, flags) == 0) return (0); } --- 733,739 ---- break; } ! /* if srest > s, we are not at start of string */ ! xflags = (srest > s) ? (flags & ~FNM_PERIOD) : flags; ! if (m1 == 0 && GMATCH (srest, se, prest, pe, xflags) == 0) return (0); } *** ../bash-3.1/patchlevel.h Wed Jul 20 13:58:20 2005 --- patchlevel.h Wed Dec 7 13:48:42 2005 *************** *** 26,30 **** looks for to find the patch level (for the sccs version string). */ ! #define PATCHLEVEL 14 #endif /* _PATCHLEVEL_H_ */ --- 26,30 ---- looks for to find the patch level (for the sccs version string). */ ! #define PATCHLEVEL 15 #endif /* _PATCHLEVEL_H_ */