From e682b26a6bc6d3db1a44d82db09d26224e82ccb5 Mon Sep 17 00:00:00 2001 From: Sergey Fedoseev Date: Mon, 25 May 2020 19:54:40 +0500 Subject: [PATCH] bpo-34397: Remove redundant overflow checks in list and tuple implementation. (GH-8757) --- 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 37fadca129a..30d26207537 100644 --- a/Objects/listobject.c +++ b/Objects/listobject.c @@ -261,12 +261,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; @@ -301,12 +297,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; @@ -503,8 +494,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 c0b59c009a2..14534632dfe 100644 --- a/Objects/tupleobject.c +++ b/Objects/tupleobject.c @@ -486,8 +486,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); if (size == 0) { return PyTuple_New(0);