about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rw-r--r--posix/fnmatch_loop.c5
-rw-r--r--posix/tst-fnmatch.input27
3 files changed, 36 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 1932ba4a9b..d1e99dacc7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2004-09-01  Jakub Jelinek  <jakub@redhat.com>
+
+	[BZ #361]
+	* posix/fnmatch_loop.c (FCT): For backslash between brackets, branch
+	to normal_bracket after fetching the next character.
+	* posix/tst-fnmatch.input: Add 25 new tests.
+	Reported by Markus Oberhumer <markus@oberhumer.com>.
+
 2004-09-01  Ulrich Drepper  <drepper@redhat.com>
 
 	* elf/rtld.c (dl_main): First check existence of ld.so.preload
diff --git a/posix/fnmatch_loop.c b/posix/fnmatch_loop.c
index 0c14d45db7..fb56bd426b 100644
--- a/posix/fnmatch_loop.c
+++ b/posix/fnmatch_loop.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991,1992,1993,1996,1997,1998,1999,2000,2001,2003
+/* Copyright (C) 1991,1992,1993,1996,1997,1998,1999,2000,2001,2003,2004
 	Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -242,8 +242,7 @@ FCT (pattern, string, string_end, no_leading_period, flags)
 		    c = FOLD ((UCHAR) *p);
 		    ++p;
 
-		    if (c == fn)
-		      goto matched;
+		    goto normal_bracket;
 		  }
 		else if (c == L('[') && *p == L(':'))
 		  {
diff --git a/posix/tst-fnmatch.input b/posix/tst-fnmatch.input
index faea8e2f9b..9061d19945 100644
--- a/posix/tst-fnmatch.input
+++ b/posix/tst-fnmatch.input
@@ -1,5 +1,5 @@
 # Tests for fnmatch.
-# Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+# Copyright (C) 2000, 2001, 2004 Free Software Foundation, Inc.
 # This file is part of the GNU C Library.
 # Contributes by Ulrich Drepper <drepper@redhat.com>.
 #
@@ -389,6 +389,31 @@ C		"az"			"[-a]z"		       0
 C		"bz"			"[-ab]z"	       0
 C		"cz"			"[-ab]z"	       NOMATCH
 C		"-z"			"[-ab]z"	       0
+C		"\\"			"[\\\\-a]"	       0
+C		"_"			"[\\\\-a]"	       0
+C		"a"			"[\\\\-a]"	       0
+C		"-"			"[\\\\-a]"	       NOMATCH
+C		"\\"			"[\\]-a]"	       NOMATCH
+C		"_"			"[\\]-a]"	       0
+C		"a"			"[\\]-a]"	       0
+C		"]"			"[\\]-a]"	       0
+C		"-"			"[\\]-a]"	       NOMATCH
+C		"\\"			"[!\\\\-a]"	       NOMATCH
+C		"_"			"[!\\\\-a]"	       NOMATCH
+C		"a"			"[!\\\\-a]"	       NOMATCH
+C		"-"			"[!\\\\-a]"	       0
+C		"!"			"[\\!-]"	       0
+C		"-"			"[\\!-]"	       0
+C		"\\"			"[\\!-]"	       NOMATCH
+C		"Z"			"[Z-\\\\]"	       0
+C		"["			"[Z-\\\\]"	       0
+C		"\\"			"[Z-\\\\]"	       0
+C		"-"			"[Z-\\\\]"	       NOMATCH
+C		"Z"			"[Z-\\]]"	       0
+C		"["			"[Z-\\]]"	       0
+C		"\\"			"[Z-\\]]"	       0
+C		"]"			"[Z-\\]]"	       0
+C		"-"			"[Z-\\]]"	       NOMATCH
 
 # Following are tests outside the scope of IEEE 2003.2 since they are using
 # locales other than the C locale.  The main focus of the tests is on the