mirror of
https://github.com/python/cpython.git
synced 2025-12-04 00:30:19 +00:00
bpo-36946:Fix possible signed integer overflow when handling slices. (GH-15639)
This is a complement to PR 13375.
This commit is contained in:
parent
32a960f8e1
commit
3c87a667bb
4 changed files with 12 additions and 3 deletions
|
|
@ -150,6 +150,11 @@ class ListTest(list_tests.CommonTest):
|
||||||
a[:] = data
|
a[:] = data
|
||||||
self.assertEqual(list(it), [])
|
self.assertEqual(list(it), [])
|
||||||
|
|
||||||
|
def test_step_overflow(self):
|
||||||
|
a = [0, 1, 2, 3, 4]
|
||||||
|
a[1::sys.maxsize] = [0]
|
||||||
|
self.assertEqual(a[3::sys.maxsize], [3])
|
||||||
|
|
||||||
def test_no_comdat_folding(self):
|
def test_no_comdat_folding(self):
|
||||||
# Issue 8847: In the PGO build, the MSVC linker's COMDAT folding
|
# Issue 8847: In the PGO build, the MSVC linker's COMDAT folding
|
||||||
# optimization causes failures in code that relies on distinct
|
# optimization causes failures in code that relies on distinct
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
Fix possible signed integer overflow when handling slices. Patch by hongweipeng.
|
||||||
|
|
@ -5195,7 +5195,8 @@ Pointer_subscript(PyObject *myself, PyObject *item)
|
||||||
PyObject *np;
|
PyObject *np;
|
||||||
StgDictObject *stgdict, *itemdict;
|
StgDictObject *stgdict, *itemdict;
|
||||||
PyObject *proto;
|
PyObject *proto;
|
||||||
Py_ssize_t i, len, cur;
|
Py_ssize_t i, len;
|
||||||
|
size_t cur;
|
||||||
|
|
||||||
/* Since pointers have no length, and we want to apply
|
/* Since pointers have no length, and we want to apply
|
||||||
different semantics to negative indices than normal
|
different semantics to negative indices than normal
|
||||||
|
|
|
||||||
|
|
@ -2789,7 +2789,8 @@ list_subscript(PyListObject* self, PyObject* item)
|
||||||
return list_item(self, i);
|
return list_item(self, i);
|
||||||
}
|
}
|
||||||
else if (PySlice_Check(item)) {
|
else if (PySlice_Check(item)) {
|
||||||
Py_ssize_t start, stop, step, slicelength, cur, i;
|
Py_ssize_t start, stop, step, slicelength, i;
|
||||||
|
size_t cur;
|
||||||
PyObject* result;
|
PyObject* result;
|
||||||
PyObject* it;
|
PyObject* it;
|
||||||
PyObject **src, **dest;
|
PyObject **src, **dest;
|
||||||
|
|
@ -2925,7 +2926,8 @@ list_ass_subscript(PyListObject* self, PyObject* item, PyObject* value)
|
||||||
/* assign slice */
|
/* assign slice */
|
||||||
PyObject *ins, *seq;
|
PyObject *ins, *seq;
|
||||||
PyObject **garbage, **seqitems, **selfitems;
|
PyObject **garbage, **seqitems, **selfitems;
|
||||||
Py_ssize_t cur, i;
|
Py_ssize_t i;
|
||||||
|
size_t cur;
|
||||||
|
|
||||||
/* protect against a[::-1] = a */
|
/* protect against a[::-1] = a */
|
||||||
if (self == (PyListObject*)value) {
|
if (self == (PyListObject*)value) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue