Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 16 Apr 2010 22:30:04 GMT
From:      dfilter@FreeBSD.ORG (dfilter service)
To:        freebsd-bugs@FreeBSD.org
Subject:   Re: bin/116074: commit references a PR
Message-ID:  <201004162230.o3GMU4LB002594@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR bin/116074; it has been noted by GNATS.

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: bin/116074: commit references a PR
Date: Fri, 16 Apr 2010 22:29:33 +0000 (UTC)

 Author: jilles
 Date: Fri Apr 16 22:29:24 2010
 New Revision: 206711
 URL: http://svn.freebsd.org/changeset/base/206711
 
 Log:
   fnmatch: Fix bad FNM_PERIOD disabling if an asterisk has been seen.
   
   Example: fnmatch("a*b/*", "abbb/.x", FNM_PATHNAME | FNM_PERIOD)
   
   PR:		116074
   MFC after:	1 week
 
 Modified:
   head/lib/libc/gen/fnmatch.c
   head/tools/regression/lib/libc/gen/test-fnmatch.c
 
 Modified: head/lib/libc/gen/fnmatch.c
 ==============================================================================
 --- head/lib/libc/gen/fnmatch.c	Fri Apr 16 22:15:26 2010	(r206710)
 +++ head/lib/libc/gen/fnmatch.c	Fri Apr 16 22:29:24 2010	(r206711)
 @@ -67,7 +67,8 @@ __FBSDID("$FreeBSD$");
  #define RANGE_ERROR     (-1)
  
  static int rangematch(const char *, wchar_t, int, char **, mbstate_t *);
 -static int fnmatch1(const char *, const char *, int, mbstate_t, mbstate_t);
 +static int fnmatch1(const char *, const char *, const char *, int, mbstate_t,
 +		mbstate_t);
  
  int
  fnmatch(pattern, string, flags)
 @@ -76,22 +77,21 @@ fnmatch(pattern, string, flags)
  {
  	static const mbstate_t initial;
  
 -	return (fnmatch1(pattern, string, flags, initial, initial));
 +	return (fnmatch1(pattern, string, string, flags, initial, initial));
  }
  
  static int
 -fnmatch1(pattern, string, flags, patmbs, strmbs)
 -	const char *pattern, *string;
 +fnmatch1(pattern, string, stringstart, flags, patmbs, strmbs)
 +	const char *pattern, *string, *stringstart;
  	int flags;
  	mbstate_t patmbs, strmbs;
  {
 -	const char *stringstart;
  	char *newp;
  	char c;
  	wchar_t pc, sc;
  	size_t pclen, sclen;
  
 -	for (stringstart = string;;) {
 +	for (;;) {
  		pclen = mbrtowc(&pc, pattern, MB_LEN_MAX, &patmbs);
  		if (pclen == (size_t)-1 || pclen == (size_t)-2)
  			return (FNM_NOMATCH);
 @@ -145,8 +145,8 @@ fnmatch1(pattern, string, flags, patmbs,
  
  			/* General case, use recursion. */
  			while (sc != EOS) {
 -				if (!fnmatch1(pattern, string,
 -				    flags & ~FNM_PERIOD, patmbs, strmbs))
 +				if (!fnmatch1(pattern, string, stringstart,
 +				    flags, patmbs, strmbs))
  					return (0);
  				sclen = mbrtowc(&sc, string, MB_LEN_MAX,
  				    &strmbs);
 
 Modified: head/tools/regression/lib/libc/gen/test-fnmatch.c
 ==============================================================================
 --- head/tools/regression/lib/libc/gen/test-fnmatch.c	Fri Apr 16 22:15:26 2010	(r206710)
 +++ head/tools/regression/lib/libc/gen/test-fnmatch.c	Fri Apr 16 22:29:24 2010	(r206711)
 @@ -174,6 +174,7 @@ struct testcase {
  	"*a", ".a/b", FNM_PATHNAME | FNM_LEADING_DIR, 0,
  	"*", ".a/b", FNM_PATHNAME | FNM_PERIOD | FNM_LEADING_DIR, FNM_NOMATCH,
  	"*a", ".a/b", FNM_PATHNAME | FNM_PERIOD | FNM_LEADING_DIR, FNM_NOMATCH,
 +	"a*b/*", "abbb/.x", FNM_PATHNAME | FNM_PERIOD, FNM_NOMATCH,
  };
  
  static const char *
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201004162230.o3GMU4LB002594>