From 4b5bbd83d85ef0e3e6c42af3b9a50f6390663450 Mon Sep 17 00:00:00 2001 From: Sergey Fedoseev Date: Sat, 10 Aug 2019 20:10:03 +0500 Subject: [PATCH] bpo-34397: Remove redundant overflow checks in list and tuple implementation. --- Objects/listobject.c | 16 +++------------- Objects/tupleobject.c | 3 +-- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/Objects/listobject.c b/Objects/listobject.c index cea9b24a3b2fb6..d199290c99a724 100644 --- a/Objects/listobject.c +++ b/Objects/listobject.c @@ -291,12 +291,8 @@ ins1(PyListObject *self, Py_ssize_t where, PyObject *v) PyErr_BadInternalCall(); return -1; } - if (n == PY_SSIZE_T_MAX) { - PyErr_SetString(PyExc_OverflowError, - "cannot add more objects to list"); - return -1; - } + assert((size_t)n + 1 < PY_SSIZE_T_MAX); if (list_resize(self, n+1) < 0) return -1; @@ -331,12 +327,7 @@ app1(PyListObject *self, PyObject *v) Py_ssize_t n = PyList_GET_SIZE(self); assert (v != NULL); - if (n == PY_SSIZE_T_MAX) { - PyErr_SetString(PyExc_OverflowError, - "cannot add more objects to list"); - return -1; - } - + assert((size_t)n + 1 < PY_SSIZE_T_MAX); if (list_resize(self, n+1) < 0) return -1; @@ -528,8 +519,7 @@ list_concat(PyListObject *a, PyObject *bb) return NULL; } #define b ((PyListObject *)bb) - if (Py_SIZE(a) > PY_SSIZE_T_MAX - Py_SIZE(b)) - return PyErr_NoMemory(); + assert((size_t)Py_SIZE(a) + (size_t)Py_SIZE(b) < PY_SSIZE_T_MAX); size = Py_SIZE(a) + Py_SIZE(b); np = (PyListObject *) list_new_prealloc(size); if (np == NULL) { diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c index aeaf845d74cfa1..77fb2e5393de55 100644 --- a/Objects/tupleobject.c +++ b/Objects/tupleobject.c @@ -483,8 +483,7 @@ tupleconcat(PyTupleObject *a, PyObject *bb) Py_INCREF(a); return (PyObject *)a; } - if (Py_SIZE(a) > PY_SSIZE_T_MAX - Py_SIZE(b)) - return PyErr_NoMemory(); + assert((size_t)Py_SIZE(a) + (size_t)Py_SIZE(b) < PY_SSIZE_T_MAX); size = Py_SIZE(a) + Py_SIZE(b); np = (PyTupleObject *) PyTuple_New(size); if (np == NULL) {