Kaydet (Commit) 9d904b93 authored tarafından Guido van Rossum's avatar Guido van Rossum

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.
üst 4ab5d85e
......@@ -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') {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment