summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2019-09-08 10:36:38 (GMT)
committerGitHub <noreply@github.com>2019-09-08 10:36:38 (GMT)
commit021e5db20bc19d678a5b94247a5cdcf689eff006 (patch)
treeb3dcece7c27d0b53b961d69054560459c185bd02
parent30933d57fc4fd3e52123554b67723f13756a70ca (diff)
downloadcpython-021e5db20bc19d678a5b94247a5cdcf689eff006.zip
cpython-021e5db20bc19d678a5b94247a5cdcf689eff006.tar.gz
cpython-021e5db20bc19d678a5b94247a5cdcf689eff006.tar.bz2
bpo-36946:Fix possible signed integer overflow when handling slices. (GH-15639)
This is a complement to PR 13375. (cherry picked from commit 3c87a667bb367ace1de6bd1577fdb4f66947da52) Co-authored-by: HongWeipeng <hongweichen8888@sina.com>
-rw-r--r--Lib/test/test_list.py5
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2019-09-02-16-17-42.bpo-36946._lAuSR.rst1
-rw-r--r--Modules/_ctypes/_ctypes.c3
-rw-r--r--Objects/listobject.c6
4 files changed, 12 insertions, 3 deletions
diff --git a/Lib/test/test_list.py b/Lib/test/test_list.py
index def4bad..5078d4b 100644
--- a/Lib/test/test_list.py
+++ b/Lib/test/test_list.py
@@ -149,6 +149,11 @@ class ListTest(list_tests.CommonTest):
a[:] = data
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):
# Issue 8847: In the PGO build, the MSVC linker's COMDAT folding
# optimization causes failures in code that relies on distinct
diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-09-02-16-17-42.bpo-36946._lAuSR.rst b/Misc/NEWS.d/next/Core and Builtins/2019-09-02-16-17-42.bpo-36946._lAuSR.rst
new file mode 100644
index 0000000..e0c5d71
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2019-09-02-16-17-42.bpo-36946._lAuSR.rst
@@ -0,0 +1 @@
+Fix possible signed integer overflow when handling slices. Patch by hongweipeng.
diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c
index 8fa6627..8008a48 100644
--- a/Modules/_ctypes/_ctypes.c
+++ b/Modules/_ctypes/_ctypes.c
@@ -5019,7 +5019,8 @@ Pointer_subscript(PyObject *myself, PyObject *item)
PyObject *np;
StgDictObject *stgdict, *itemdict;
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
different semantics to negative indices than normal
diff --git a/Objects/listobject.c b/Objects/listobject.c
index 78aa8de..c5e7553 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -2729,7 +2729,8 @@ list_subscript(PyListObject* self, PyObject* item)
return list_item(self, i);
}
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* it;
PyObject **src, **dest;
@@ -2865,7 +2866,8 @@ list_ass_subscript(PyListObject* self, PyObject* item, PyObject* value)
/* assign slice */
PyObject *ins, *seq;
PyObject **garbage, **seqitems, **selfitems;
- Py_ssize_t cur, i;
+ Py_ssize_t i;
+ size_t cur;
/* protect against a[::-1] = a */
if (self == (PyListObject*)value) {