Mercurial > hg > octave-lojdl > gnulib-hg
changeset 11210:28a51f0d9605
strtod: detect HP-UX 11.31 bug
* m4/strtod.m4 (gl_FUNC_STRTOD): Detect errno handling bug.
Reported by Gary V. Vaughan.
Signed-off-by: Eric Blake <ebb9@byu.net>
author | Eric Blake <ebb9@byu.net> |
---|---|
date | Tue, 24 Feb 2009 06:15:59 -0700 |
parents | 7e4d159080dc |
children | 3070459611d3 |
files | ChangeLog m4/strtod.m4 |
diffstat | 2 files changed, 12 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2009-02-24 Eric Blake <ebb9@byu.net> + + strtod: detect HP-UX 11.31 bug + * m4/strtod.m4 (gl_FUNC_STRTOD): Detect errno handling bug. + Reported by Gary V. Vaughan. + 2009-02-23 Bruno Haible <bruno@clisp.org> Fix invalid read past end of memory block.
--- a/m4/strtod.m4 +++ b/m4/strtod.m4 @@ -1,4 +1,4 @@ -# strtod.m4 serial 10 +# strtod.m4 serial 11 dnl Copyright (C) 2002-2003, 2006-2009 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -18,6 +18,7 @@ [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <stdlib.h> #include <math.h> +#include <errno.h> /* Compare two numbers with ==. This is a separate function because IRIX 6.5 "cc -O" miscompiles an 'x == x' test. */ @@ -45,11 +46,13 @@ return 1; } { - /* Many platforms do not parse infinities. */ + /* Many platforms do not parse infinities. HP-UX 11.31 parses inf, + but mistakenly sets errno. */ const char *string = "inf"; char *term; + errno = 0; double value = strtod (string, &term); - if (value != HUGE_VAL || term != (string + 3)) + if (value != HUGE_VAL || term != (string + 3) || errno) return 1; } {