diff options
-rw-r--r-- | posix/Makefile | 3 | ||||
-rw-r--r-- | posix/fnmatch_loop.c | 4 | ||||
-rw-r--r-- | posix/tst-fnmatch6.c | 37 |
3 files changed, 41 insertions, 3 deletions
diff --git a/posix/Makefile b/posix/Makefile index 605ddbade8..83c4d57231 100644 --- a/posix/Makefile +++ b/posix/Makefile @@ -96,7 +96,7 @@ tests := test-errno tstgetopt testfnm runtests runptests \ bug-getopt5 tst-getopt_long1 bug-regex34 bug-regex35 \ tst-pathconf tst-rxspencer-no-utf8 \ tst-fnmatch3 bug-regex36 \ - tst-fnmatch4 tst-fnmatch5 \ + tst-fnmatch4 tst-fnmatch5 tst-fnmatch6 \ tst-posix_spawn-fd tst-posix_spawn-setsid \ tst-posix_fadvise tst-posix_fadvise64 \ tst-sysconf-empty-chroot tst-glob_symlinks tst-fexecve \ @@ -197,6 +197,7 @@ $(objpfx)bug-regex35.out: $(gen-locales) $(objpfx)tst-fnmatch.out: $(gen-locales) $(objpfx)tst-fnmatch4.out: $(gen-locales) $(objpfx)tst-fnmatch5.out: $(gen-locales) +$(objpfx)tst-fnmatch6.out: $(gen-locales) $(objpfx)tst-regex.out: $(gen-locales) $(objpfx)tst-regex2.out: $(gen-locales) $(objpfx)tst-regexloc.out: $(gen-locales) diff --git a/posix/fnmatch_loop.c b/posix/fnmatch_loop.c index 8ead4dc7b9..0f890d4782 100644 --- a/posix/fnmatch_loop.c +++ b/posix/fnmatch_loop.c @@ -564,7 +564,7 @@ FCT (const CHAR *pattern, const CHAR *string, const CHAR *string_end, /* Get the collation sequence value. */ is_seqval = 1; # if WIDE_CHAR_VERSION - cold = wextra[1 + wextra[idx]]; + cold = wextra[1 + wextra[0]]; # else idx += 1 + extra[idx]; /* Adjust for the alignment. */ @@ -738,7 +738,7 @@ FCT (const CHAR *pattern, const CHAR *string, const CHAR *string_end, /* Get the collation sequence value. */ is_seqval = 1; # if WIDE_CHAR_VERSION - cend = wextra[1 + wextra[idx]]; + cend = wextra[1 + wextra[0]]; # else idx += 1 + extra[idx]; /* Adjust for the alignment. */ diff --git a/posix/tst-fnmatch6.c b/posix/tst-fnmatch6.c new file mode 100644 index 0000000000..c255702a72 --- /dev/null +++ b/posix/tst-fnmatch6.c @@ -0,0 +1,37 @@ +/* Test for fnmatch handling of collating symbols (bug 26620) + Copyright (C) 2020 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <fnmatch.h> +#include <locale.h> +#include <support/check.h> +#include <support/support.h> + +static int +do_test (void) +{ + xsetlocale (LC_ALL, "en_US.UTF-8"); + /* From iso14651_t1_common: + collating-element <U004C_00B7> from "<U004C><U00B7>" + % decomposition of LATIN CAPITAL LETTER L WITH MIDDLE DOT */ + TEST_VERIFY (fnmatch ("[[.L\xc2\xb7.]]", ".", 0) != 0); + TEST_VERIFY (fnmatch ("[[.L\xc2\xb7.]]", "L\xc2\xb7", 0) == 0); + + return 0; +} + +#include <support/test-driver.c> |