mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-10-31 22:10:34 +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"
 |