summaryrefslogtreecommitdiffstats
path: root/source/a/bash/patches/bash31-015
blob: deb9eed58304081236a8853992cfca5bbf0f2c80 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
			     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_ */