mirror of
https://sourceware.org/git/glibc.git
synced 2025-12-24 17:51:17 +03:00
Fix unnecessary overallocation due to incomplete character
When incomplete characters are found at the end of a string the code ran amok and allocated lots of memory. Stricter limits are now in place.
This commit is contained in:
36
posix/bug-regex32.c
Normal file
36
posix/bug-regex32.c
Normal file
@@ -0,0 +1,36 @@
|
||||
// BZ 12811
|
||||
#include <regex.h>
|
||||
#include <stdio.h>
|
||||
#include <locale.h>
|
||||
|
||||
static int
|
||||
do_test (void)
|
||||
{
|
||||
char buf[1000];
|
||||
regex_t preg;
|
||||
if (setlocale (LC_CTYPE, "de_DE.UTF-8") == NULL)
|
||||
{
|
||||
puts ("setlocale failed");
|
||||
return 1;
|
||||
}
|
||||
|
||||
int e = regcomp (&preg, ".*ab", REG_ICASE);
|
||||
if (e != 0)
|
||||
{
|
||||
regerror (e, &preg, buf, sizeof (buf));
|
||||
printf ("regcomp = %d \"%s\"\n", e, buf);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Incomplete character at the end of the buffer
|
||||
e = regexec (&preg, "aaaaaaaaaaaa\xc4", 0, NULL, 0);
|
||||
|
||||
regfree (&preg);
|
||||
regerror (e, &preg, buf, sizeof (buf));
|
||||
printf ("regexec = %d \"%s\"\n", e, buf);
|
||||
|
||||
return e != REG_NOMATCH;
|
||||
}
|
||||
|
||||
#define TEST_FUNCTION do_test ()
|
||||
#include "../test-skeleton.c"
|
||||
Reference in New Issue
Block a user