Fix read past end of pattern in fnmatch (bug 18032)

This commit is contained in:
Andreas Schwab 2015-02-26 14:55:24 +01:00
parent 524ae9ea2e
commit 4a28f4d55a
4 changed files with 15 additions and 7 deletions

View File

@ -1,3 +1,10 @@
2015-02-26 Andreas Schwab <schwab@suse.de>
[BZ #18032]
* posix/fnmatch_loop.c (FCT): Remove extra increment when skipping
over collating symbol inside a bracket expression. Minor cleanup.
* posix/tst-fnmatch3.c (do_test): Add test case.
2015-02-26 Joseph Myers <joseph@codesourcery.com>
[BZ #18029]

2
NEWS
View File

@ -12,7 +12,7 @@ Version 2.22
4719, 14841, 13064, 14094, 15319, 15467, 15790, 15969, 16560, 16783,
17269, 17523, 17569, 17588, 17792, 17836, 17912, 17916, 17932, 17944,
17949, 17964, 17965, 17967, 17969, 17978, 17987, 17991, 17996, 17998,
17999, 18019, 18020, 18029.
17999, 18019, 18020, 18029, 18032.
* Character encoding and ctype tables were updated to Unicode 7.0.0, using
new generator scripts contributed by Pravin Satpute and Mike FABIAN (Red

View File

@ -945,14 +945,13 @@ FCT (pattern, string, string_end, no_leading_period, flags, ends, alloca_used)
}
else if (c == L('[') && *p == L('.'))
{
++p;
while (1)
{
c = *++p;
if (c == '\0')
if (c == L('\0'))
return FNM_NOMATCH;
if (*p == L('.') && p[1] == L(']'))
if (c == L('.') && p[1] == L(']'))
break;
}
p += 2;

View File

@ -21,9 +21,11 @@
int
do_test (void)
{
const char *pattern = "[[:alpha:]'[:alpha:]\0]";
return fnmatch (pattern, "a", 0) != FNM_NOMATCH;
if (fnmatch ("[[:alpha:]'[:alpha:]\0]", "a", 0) != FNM_NOMATCH)
return 1;
if (fnmatch ("[a[.\0.]]", "a", 0) != FNM_NOMATCH)
return 1;
return 0;
}
#define TEST_FUNCTION do_test ()