This is the mail archive of the
glibc-bugs@sourceware.org
mailing list for the glibc project.
[Bug libc/13246] New: RFE: strtold: do not include uninitialized bytes when converting "NaN"
- From: "jim at meyering dot net" <sourceware-bugzilla at sourceware dot org>
- To: glibc-bugs at sources dot redhat dot com
- Date: Sat, 01 Oct 2011 17:38:55 +0000
- Subject: [Bug libc/13246] New: RFE: strtold: do not include uninitialized bytes when converting "NaN"
- Auto-submitted: auto-generated
http://sourceware.org/bugzilla/show_bug.cgi?id=13246
Bug #: 13246
Summary: RFE: strtold: do not include uninitialized bytes when
converting "NaN"
Product: glibc
Version: 2.14
Status: NEW
Severity: normal
Priority: P2
Component: libc
AssignedTo: drepper.fsp@gmail.com
ReportedBy: jim@meyering.net
Classification: Unclassified
strtold ("nan", NULL) appears to return a result that depends on the prior
state of the stack. That non-determinism caused GNU sort to infloop, but we've
worked around this glibc-specific issue: http://debbugs.gnu.org/9612
Here's a little program to demonstrate the problem.
Note how the results differ with compilation options:
#include <stdlib.h>
#include <stdio.h>
static char *
fmt_nan (long double x)
{
unsigned int i;
static char buf[33];
unsigned char const *p = (unsigned char const *) &x;
for (i = 0; i < sizeof x; i++)
sprintf (buf + 2*i, "%02x", *p++);
return buf;
}
int
main ()
{
const char *q = "nan";
long double x = strtold (q, NULL);
printf ("%s\n", fmt_nan (x));
x = 0;
x = strtold (q, NULL);
printf ("%s\n", fmt_nan (x));
return 0;
}
$ gcc -O0 -Wall -Wextra -W /t/strtold-bogosity.c && ./a.out
00000000000000c0ff7f400000000000
00000000000000c0ff7f000000000000
$ gcc -O1 -Wall -Wextra -W /t/strtold-bogosity.c && ./a.out
00000000000000c0ff7f000000000000
00000000000000c0ff7f000000000000
--
Configure bugmail: http://sourceware.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.