mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-11-03 20:53:13 +03:00 
			
		
		
		
	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.
		
			
				
	
	
		
			37 lines
		
	
	
		
			735 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			735 B
		
	
	
	
		
			C
		
	
	
	
	
	
// 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"
 |