diff -r 6c2e2de5ab8e Objects/listobject.c --- a/Objects/listobject.c Sat Jul 30 23:51:13 2016 -0700 +++ b/Objects/listobject.c Mon Aug 01 01:22:50 2016 +0800 @@ -26,8 +26,7 @@ list_resize(PyListObject *self, Py_ssize_t newsize) { PyObject **items; - size_t new_allocated; - Py_ssize_t allocated = self->allocated; + Py_ssize_t new_allocated, allocated = self->allocated; /* Bypass realloc() when a previous overallocation is large enough to accommodate the newsize. If the newsize falls lower than half @@ -49,7 +48,7 @@ new_allocated = (newsize >> 3) + (newsize < 9 ? 3 : 6); /* check for integer overflow */ - if (new_allocated > PY_SIZE_MAX - newsize) { + if (new_allocated > PY_SSIZE_T_MAX - newsize) { PyErr_NoMemory(); return -1; } else { @@ -59,14 +58,11 @@ if (newsize == 0) new_allocated = 0; items = self->ob_item; - if (new_allocated <= (PY_SIZE_MAX / sizeof(PyObject *))) - PyMem_RESIZE(items, PyObject *, new_allocated); - else - items = NULL; - if (items == NULL) { + if (!PyMem_RESIZE(items, PyObject *, new_allocated)) { PyErr_NoMemory(); return -1; } + self->ob_item = items; Py_SIZE(self) = newsize; self->allocated = new_allocated;