From 9d904b9389afafdcebc27788cb4ef84377a8d593 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Thu, 1 Oct 1998 20:35:46 +0000 Subject: Believe it or not, Solaris 2.6 strtod() can move the end pointer *beyond* the null byte at the end of the input string, when the input is inf(inity). Discovered by Greg Ward. --- Objects/abstract.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Objects/abstract.c b/Objects/abstract.c index 123455a..bfc0811 100644 --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -131,11 +131,12 @@ float_from_string(v) PyObject *v; { extern double strtod Py_PROTO((const char *, char **)); - char *s, *end; + char *s, *last, *end; double x; char buffer[256]; /* For errors */ s = PyString_AS_STRING(v); + last = s + PyString_GET_SIZE(v); while (*s && isspace(Py_CHARMASK(*s))) s++; if (s[0] == '\0') { @@ -146,6 +147,10 @@ float_from_string(v) PyFPE_START_PROTECT("float_from_string", return 0) x = strtod(s, &end); PyFPE_END_PROTECT(x) + /* Believe it or not, Solaris 2.6 can move end *beyond* the null + byte at the end of the string, when the input is inf(inity) */ + if (end > last) + end = last; while (*end && isspace(Py_CHARMASK(*end))) end++; if (*end != '\0') { -- cgit v0.12