Reset errno before both calls to PyOS_ascii_strtod, not just one.
diff --git a/Objects/complexobject.c b/Objects/complexobject.c
index d1e9e92..ecf70da 100644
--- a/Objects/complexobject.c
+++ b/Objects/complexobject.c
@@ -911,8 +911,6 @@
return NULL;
}
- errno = 0;
-
/* position on first nonblank */
start = s;
while (*s && isspace(Py_CHARMASK(*s)))
@@ -947,6 +945,7 @@
*/
/* first look for forms starting with <float> */
+ errno = 0;
z = PyOS_ascii_strtod(s, &end);
if (end == s && errno == ENOMEM)
return PyErr_NoMemory();
@@ -959,6 +958,7 @@
if (*s == '+' || *s == '-') {
/* <float><signed-float>j | <float><sign>j */
x = z;
+ errno = 0;
y = PyOS_ascii_strtod(s, &end);
if (end == s && errno == ENOMEM)
return PyErr_NoMemory();