diff -r fc034d3607a8 Objects/listobject.c --- a/Objects/listobject.c Thu Aug 04 01:53:40 2016 +0000 +++ b/Objects/listobject.c Thu Aug 04 11:15:54 2016 +0800 @@ -140,7 +140,6 @@ PyList_New(Py_ssize_t size) { PyListObject *op; - size_t nbytes; #ifdef SHOW_ALLOC_COUNT static int initialized = 0; if (!initialized) { @@ -153,11 +152,6 @@ PyErr_BadInternalCall(); return NULL; } - /* Check for overflow without an actual overflow, - * which can cause compiler to optimise out */ - if ((size_t)size > PY_SIZE_MAX / sizeof(PyObject *)) - return PyErr_NoMemory(); - nbytes = size * sizeof(PyObject *); if (numfree) { numfree--; op = free_list[numfree]; @@ -176,12 +170,11 @@ if (size <= 0) op->ob_item = NULL; else { - op->ob_item = (PyObject **) PyMem_MALLOC(nbytes); + op->ob_item = (PyObject **) PyMem_Calloc(size, sizeof(PyObject *)); if (op->ob_item == NULL) { Py_DECREF(op); return PyErr_NoMemory(); } - memset(op->ob_item, 0, nbytes); } Py_SIZE(op) = size; op->allocated = size; @@ -2504,7 +2497,7 @@ } assert((size_t)slicelength <= - PY_SIZE_MAX / sizeof(PyObject*)); + PY_SSIZE_T_MAX / sizeof(PyObject*)); garbage = (PyObject**) PyMem_MALLOC(slicelength*sizeof(PyObject*));