Skip to content

Commit 6d6a9d3

Browse files
author
guido.van.rossum
committed
Rewrite the list_inline_repeat overflow check slightly differently.
git-svn-id: http://svn.python.org/projects/python/trunk@60296 6015fed2-1504-0410-9fe1-9d1591cc4771
1 parent 311cefe commit 6d6a9d3

1 file changed

Lines changed: 7 additions & 6 deletions

File tree

Objects/listobject.c

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -502,7 +502,7 @@ list_repeat(PyListObject *a, Py_ssize_t n)
502502
if (n && size/n != Py_SIZE(a))
503503
return PyErr_NoMemory();
504504
if (size == 0)
505-
return PyList_New(0);
505+
return PyList_New(0);
506506
np = (PyListObject *) PyList_New(size);
507507
if (np == NULL)
508508
return NULL;
@@ -669,11 +669,11 @@ static PyObject *
669669
list_inplace_repeat(PyListObject *self, Py_ssize_t n)
670670
{
671671
PyObject **items;
672-
Py_ssize_t size, i, j, p, newsize;
672+
Py_ssize_t size, i, j, p;
673673

674674

675675
size = PyList_GET_SIZE(self);
676-
if (size == 0) {
676+
if (size == 0 || n == 1) {
677677
Py_INCREF(self);
678678
return (PyObject *)self;
679679
}
@@ -684,10 +684,11 @@ list_inplace_repeat(PyListObject *self, Py_ssize_t n)
684684
return (PyObject *)self;
685685
}
686686

687-
newsize = size * n;
688-
if (newsize/n != size)
687+
if (size > SSIZE_MAX / n) {
689688
return PyErr_NoMemory();
690-
if (list_resize(self, newsize) == -1)
689+
}
690+
691+
if (list_resize(self, size*n) == -1)
691692
return NULL;
692693

693694
p = size;

0 commit comments

Comments
 (0)