diff -r 8c9769b17171 Objects/complexobject.c --- a/Objects/complexobject.c Mon Nov 04 07:44:29 2013 +0100 +++ b/Objects/complexobject.c Sat Nov 23 20:48:28 2013 +0100 @@ -790,6 +790,12 @@ "complex() argument must be a string or a number"); return NULL; } + if (len > INT_MAX) { + Py_XDECREF(s_buffer); + PyErr_SetString(PyExc_OverflowError, + "complex() argument is too long."); + return NULL; + } /* position on first nonblank */ start = s; diff -r 8c9769b17171 Objects/floatobject.c --- a/Objects/floatobject.c Mon Nov 04 07:44:29 2013 +0100 +++ b/Objects/floatobject.c Sat Nov 23 20:48:28 2013 +0100 @@ -204,6 +204,12 @@ "float() argument must be a string or a number"); return NULL; } + if (len > INT_MAX) { + Py_XDECREF(s_buffer); + PyErr_SetString(PyExc_OverflowError, + "float() argument is too long."); + return NULL; + } last = s + len; /* strip space */ while (s < last && Py_ISSPACE(*s)) diff -r 8c9769b17171 Python/dtoa.c --- a/Python/dtoa.c Mon Nov 04 07:44:29 2013 +0100 +++ b/Python/dtoa.c Sat Nov 23 20:48:28 2013 +0100 @@ -1693,6 +1693,10 @@ * this for larger i values. */ e -= i; + if (e < 0) { + /* quick workaround for segfault Issue #19638 */ + goto failed_malloc; + } dval(&rv) *= tens[i]; dval(&rv) *= tens[e]; goto ret;