diff options
author | Mark Dickinson <mdickinson@enthought.com> | 2011-09-19 18:18:37 (GMT) |
---|---|---|
committer | Mark Dickinson <mdickinson@enthought.com> | 2011-09-19 18:18:37 (GMT) |
commit | c0420fd42ade6d996bfe2ae2beffa3de79524883 (patch) | |
tree | d7bbc5789a54d1e4f79836fa8d5b92c1c7cb5902 /Objects/listobject.c | |
parent | bc566b00adb18c77331f5786525c4584984fda51 (diff) | |
download | cpython-c0420fd42ade6d996bfe2ae2beffa3de79524883.zip cpython-c0420fd42ade6d996bfe2ae2beffa3de79524883.tar.gz cpython-c0420fd42ade6d996bfe2ae2beffa3de79524883.tar.bz2 |
Issue #12973: Fix undefined-behaviour-inducing overflow check in list_repeat.
Diffstat (limited to 'Objects/listobject.c')
-rw-r--r-- | Objects/listobject.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/Objects/listobject.c b/Objects/listobject.c index 73624f0..36f8b9d 100644 --- a/Objects/listobject.c +++ b/Objects/listobject.c @@ -58,7 +58,7 @@ list_resize(PyListObject *self, Py_ssize_t newsize) if (newsize == 0) new_allocated = 0; items = self->ob_item; - if (new_allocated <= ((~(size_t)0) / sizeof(PyObject *))) + if (new_allocated <= (PY_SIZE_MAX / sizeof(PyObject *))) PyMem_RESIZE(items, PyObject *, new_allocated); else items = NULL; @@ -510,9 +510,9 @@ list_repeat(PyListObject *a, Py_ssize_t n) PyObject *elem; if (n < 0) n = 0; - size = Py_SIZE(a) * n; - if (n && size/n != Py_SIZE(a)) + if (n > 0 && Py_SIZE(a) > PY_SSIZE_T_MAX / n) return PyErr_NoMemory(); + size = Py_SIZE(a) * n; if (size == 0) return PyList_New(0); np = (PyListObject *) PyList_New(size); |