mirror of git://sourceware.org/git/glibc.git
				
				
				
			[BZ #5774]
* stdlib/strtod_l.c (____STRTOF_INTERNAL): Consume closing brace on NAN(...) sequence. * stdlib/Makefile (tests): Add tst-strtod6. * stdlib/tst-strtod6.c: New file. * inet/inet6_opt.c (inet6_opt_init): Check extlen for overflow.
This commit is contained in:
		
							parent
							
								
									2127a18634
								
							
						
					
					
						commit
						b3278554af
					
				|  | @ -1,5 +1,13 @@ | ||||||
| 2008-03-08  Ulrich Drepper  <drepper@redhat.com> | 2008-03-08  Ulrich Drepper  <drepper@redhat.com> | ||||||
| 
 | 
 | ||||||
|  | 	[BZ #5774] | ||||||
|  | 	* stdlib/strtod_l.c (____STRTOF_INTERNAL): Consume closing brace | ||||||
|  | 	on NAN(...) sequence. | ||||||
|  | 	* stdlib/Makefile (tests): Add tst-strtod6. | ||||||
|  | 	* stdlib/tst-strtod6.c: New file. | ||||||
|  | 
 | ||||||
|  | 	* inet/inet6_opt.c (inet6_opt_init): Check extlen for overflow. | ||||||
|  | 
 | ||||||
| 	[BZ #5762] | 	[BZ #5762] | ||||||
| 	* posix/getopt.c (_getopt_internal_r): Clarify error message by | 	* posix/getopt.c (_getopt_internal_r): Clarify error message by | ||||||
| 	putting offending option character in quotes.  Clean up error | 	putting offending option character in quotes.  Clean up error | ||||||
|  |  | ||||||
|  | @ -34,7 +34,7 @@ inet6_opt_init (void *extbuf, socklen_t extlen) | ||||||
| { | { | ||||||
|   if (extbuf != NULL) |   if (extbuf != NULL) | ||||||
|     { |     { | ||||||
|       if (extlen <= 0 || (extlen % 8) != 0) |       if (extlen <= 0 || (extlen % 8) != 0 || extlen > 256 * 8) | ||||||
| 	return -1; | 	return -1; | ||||||
| 
 | 
 | ||||||
|       /* Fill in the length in units of 8 octets.  */ |       /* Fill in the length in units of 8 octets.  */ | ||||||
|  |  | ||||||
|  | @ -69,7 +69,7 @@ tests		:= tst-strtol tst-strtod testmb testrand testsort testdiv   \ | ||||||
| 		   test-a64l tst-qsort tst-system testmb2 bug-strtod2	    \
 | 		   test-a64l tst-qsort tst-system testmb2 bug-strtod2	    \
 | ||||||
| 		   tst-atof1 tst-atof2 tst-strtod2 tst-strtod3 tst-rand48-2 \
 | 		   tst-atof1 tst-atof2 tst-strtod2 tst-strtod3 tst-rand48-2 \
 | ||||||
| 		   tst-makecontext tst-strtod4 tst-strtod5 tst-qsort2	    \
 | 		   tst-makecontext tst-strtod4 tst-strtod5 tst-qsort2	    \
 | ||||||
| 		   tst-makecontext2 | 		   tst-makecontext2 tst-strtod6 | ||||||
| 
 | 
 | ||||||
| include ../Makeconfig | include ../Makeconfig | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -594,6 +594,9 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc) | ||||||
| 		  mant = STRTOULL (startp + 1, &endp, 0); | 		  mant = STRTOULL (startp + 1, &endp, 0); | ||||||
| 		  if (endp == cp) | 		  if (endp == cp) | ||||||
| 		    SET_MANTISSA (retval, mant); | 		    SET_MANTISSA (retval, mant); | ||||||
|  | 
 | ||||||
|  | 		  /* Consume the closing brace.  */ | ||||||
|  | 		  ++cp; | ||||||
| 		} | 		} | ||||||
| 	    } | 	    } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -0,0 +1,53 @@ | ||||||
|  | #include <math.h> | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <stdlib.h> | ||||||
|  | #include <string.h> | ||||||
|  | 
 | ||||||
|  | static int | ||||||
|  | do_test (void) | ||||||
|  | { | ||||||
|  |   static const char str[] = "NaN(blabla)something"; | ||||||
|  |   char *endp; | ||||||
|  |   int result = 0; | ||||||
|  | 
 | ||||||
|  |   double d = strtod (str, &endp); | ||||||
|  |   if (!isnan (d)) | ||||||
|  |     { | ||||||
|  |       puts ("strtod did not return NAN"); | ||||||
|  |       result = 1; | ||||||
|  |     } | ||||||
|  |   if (strcmp (endp, "something") != 0) | ||||||
|  |     { | ||||||
|  |       puts  ("strtod set incorrect end pointer"); | ||||||
|  |       result = 1; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |   float f = strtof (str, &endp); | ||||||
|  |   if (!isnanf (f)) | ||||||
|  |     { | ||||||
|  |       puts ("strtof did not return NAN"); | ||||||
|  |       result = 1; | ||||||
|  |     } | ||||||
|  |   if (strcmp (endp, "something") != 0) | ||||||
|  |     { | ||||||
|  |       puts  ("strtof set incorrect end pointer"); | ||||||
|  |       result = 1; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |   long double ld = strtold (str, &endp); | ||||||
|  |   if (!isnan (ld)) | ||||||
|  |     { | ||||||
|  |       puts ("strtold did not return NAN"); | ||||||
|  |       result = 1; | ||||||
|  |     } | ||||||
|  |   if (strcmp (endp, "something") != 0) | ||||||
|  |     { | ||||||
|  |       puts  ("strtold set incorrect end pointer"); | ||||||
|  |       result = 1; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |   return result; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #define TEST_FUNCTION do_test () | ||||||
|  | #include "../test-skeleton.c" | ||||||
		Loading…
	
		Reference in New Issue