mirror of
https://github.com/python/cpython.git
synced 2025-11-01 02:38:53 +00:00
Fix the overflow checking of list_repeat.
Introduce overflow checking into list_inplace_repeat. Backport candidate, possibly.
This commit is contained in:
parent
7b201162cf
commit
a1e42e11d5
2 changed files with 16 additions and 4 deletions
|
|
@ -499,10 +499,10 @@ list_repeat(PyListObject *a, Py_ssize_t n)
|
|||
if (n < 0)
|
||||
n = 0;
|
||||
size = Py_Size(a) * n;
|
||||
if (size == 0)
|
||||
return PyList_New(0);
|
||||
if (n && size/n != Py_Size(a))
|
||||
return PyErr_NoMemory();
|
||||
if (size == 0)
|
||||
return PyList_New(0);
|
||||
np = (PyListObject *) PyList_New(size);
|
||||
if (np == NULL)
|
||||
return NULL;
|
||||
|
|
@ -669,7 +669,7 @@ static PyObject *
|
|||
list_inplace_repeat(PyListObject *self, Py_ssize_t n)
|
||||
{
|
||||
PyObject **items;
|
||||
Py_ssize_t size, i, j, p;
|
||||
Py_ssize_t size, i, j, p, newsize;
|
||||
|
||||
|
||||
size = PyList_GET_SIZE(self);
|
||||
|
|
@ -684,7 +684,10 @@ list_inplace_repeat(PyListObject *self, Py_ssize_t n)
|
|||
return (PyObject *)self;
|
||||
}
|
||||
|
||||
if (list_resize(self, size*n) == -1)
|
||||
newsize = size * n;
|
||||
if (newsize/n != size)
|
||||
return PyErr_NoMemory();
|
||||
if (list_resize(self, newsize) == -1)
|
||||
return NULL;
|
||||
|
||||
p = size;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue