diff --git a/Modules/stropmodule.c b/Modules/stropmodule.c index 2d884744aa7..7383194a7e2 100644 --- a/Modules/stropmodule.c +++ b/Modules/stropmodule.c @@ -879,10 +879,12 @@ strop_atof(PyObject *self, PyObject *args) PyErr_SetString(PyExc_ValueError, "empty string for atof()"); return NULL; } - errno = 0; + PyFPE_START_PROTECT("strop_atof", return 0) - x = PyOS_ascii_strtod(s, &end); + x = PyOS_string_to_double(s, &end, PyExc_OverflowError); PyFPE_END_PROTECT(x) + if (x == -1 && PyErr_Occurred()) + return NULL; while (*end && isspace(Py_CHARMASK(*end))) end++; if (*end != '\0') { @@ -891,12 +893,6 @@ strop_atof(PyObject *self, PyObject *args) PyErr_SetString(PyExc_ValueError, buffer); return NULL; } - else if (errno != 0) { - PyOS_snprintf(buffer, sizeof(buffer), - "atof() literal too large: %.200s", s); - PyErr_SetString(PyExc_ValueError, buffer); - return NULL; - } return PyFloat_FromDouble(x); }