This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Don't accept exp char without digits in scanf float parsing


Hi!

On Thu, 11 Apr 2013 10:40:00 +0200, Andreas Schwab <schwab@suse.de> wrote:
> This is what I've checked in.

> 	[BZ #13988]
> 	* stdio-common/vfscanf.c (_IO_vfwscanf): When parsing a float
> 	accept exponent character only when digits were seen.
> 	* stdio-common/Makefile (tests): Add bug26.
> 	* stdio-common/bug26.c: New file.

> --- /dev/null
> +++ b/stdio-common/bug26.c

> +  double d;
> +  char s[] = "+.e";
> +
> +  f = fmemopen (s, strlen (s), "r");
> +  /* This should fail to parse a float and leave 'e' in the input.  */
> +  lost |= (fscanf (f, "%f", &d) != 0);

    gcc-4.7 bug26.c -c [...]
    bug26.c: In function 'main':
    bug26.c:32:3: warning: format '%f' expects argument of type 'float *', but argument 3 has type 'double *' [-Wformat]

Pushed as obvious as commit 528c24058fb100fb27fe5c211b92be84c67a6659:

	* stdio-common/bug26.c (main): Correct fscanf template.

diff --git stdio-common/bug26.c stdio-common/bug26.c
index a4c6bce..cc54b96 100644
--- stdio-common/bug26.c
+++ stdio-common/bug26.c
@@ -28,8 +28,9 @@ main (void)
   char s[] = "+.e";
 
   f = fmemopen (s, strlen (s), "r");
-  /* This should fail to parse a float and leave 'e' in the input.  */
-  lost |= (fscanf (f, "%f", &d) != 0);
+  /* This should fail to parse a floating-point number, and leave 'e' in the
+     input.  */
+  lost |= (fscanf (f, "%lf", &d) != 0);
   c = fgetc (f);
   lost |= c != 'e';
   puts (lost ? "Test FAILED!" : "Test succeeded.");


GrÃÃe,
 Thomas

Attachment: pgpex6CrQorXI.pgp
Description: PGP signature


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]