Commit 62b1b001 authored by Georg Brandl's avatar Georg Brandl

Patch #1654417: make operator.{get,set,del}slice use the full range

of Py_ssize_t.
 (backport from rev. 54177)
parent 2230d980
...@@ -143,6 +143,8 @@ class OperatorTestCase(unittest.TestCase): ...@@ -143,6 +143,8 @@ class OperatorTestCase(unittest.TestCase):
self.failUnlessRaises(TypeError, operator.delslice, a, None, None) self.failUnlessRaises(TypeError, operator.delslice, a, None, None)
self.failUnless(operator.delslice(a, 2, 8) is None) self.failUnless(operator.delslice(a, 2, 8) is None)
self.assert_(a == [0, 1, 8, 9]) self.assert_(a == [0, 1, 8, 9])
operator.delslice(a, 0, test_support.MAX_Py_ssize_t)
self.assert_(a == [])
def test_div(self): def test_div(self):
self.failUnlessRaises(TypeError, operator.div, 5) self.failUnlessRaises(TypeError, operator.div, 5)
...@@ -170,6 +172,8 @@ class OperatorTestCase(unittest.TestCase): ...@@ -170,6 +172,8 @@ class OperatorTestCase(unittest.TestCase):
self.failUnlessRaises(TypeError, operator.getslice) self.failUnlessRaises(TypeError, operator.getslice)
self.failUnlessRaises(TypeError, operator.getslice, a, None, None) self.failUnlessRaises(TypeError, operator.getslice, a, None, None)
self.failUnless(operator.getslice(a, 4, 6) == [4, 5]) self.failUnless(operator.getslice(a, 4, 6) == [4, 5])
b = operator.getslice(a, 0, test_support.MAX_Py_ssize_t)
self.assert_(b == a)
def test_indexOf(self): def test_indexOf(self):
self.failUnlessRaises(TypeError, operator.indexOf) self.failUnlessRaises(TypeError, operator.indexOf)
...@@ -318,6 +322,8 @@ class OperatorTestCase(unittest.TestCase): ...@@ -318,6 +322,8 @@ class OperatorTestCase(unittest.TestCase):
self.failUnlessRaises(TypeError, operator.setslice, a, None, None, None) self.failUnlessRaises(TypeError, operator.setslice, a, None, None, None)
self.failUnless(operator.setslice(a, 1, 3, [2, 1]) is None) self.failUnless(operator.setslice(a, 1, 3, [2, 1]) is None)
self.assert_(a == [0, 2, 1, 3]) self.assert_(a == [0, 2, 1, 3])
operator.setslice(a, 0, test_support.MAX_Py_ssize_t, [])
self.assert_(a == [])
def test_sub(self): def test_sub(self):
self.failUnlessRaises(TypeError, operator.sub) self.failUnlessRaises(TypeError, operator.sub)
......
...@@ -120,6 +120,9 @@ Core and builtins ...@@ -120,6 +120,9 @@ Core and builtins
Extension Modules Extension Modules
----------------- -----------------
- Patch #1654417: make operator.{get,set,del}slice use the full range
of Py_ssize_t.
- Patch #1646728: datetime.fromtimestamp fails with negative - Patch #1646728: datetime.fromtimestamp fails with negative
fractional times. With unittest. fractional times. With unittest.
......
...@@ -168,43 +168,41 @@ static PyObject* ...@@ -168,43 +168,41 @@ static PyObject*
op_getslice(PyObject *s, PyObject *a) op_getslice(PyObject *s, PyObject *a)
{ {
PyObject *a1; PyObject *a1;
int a2,a3; Py_ssize_t a2, a3;
if (!PyArg_ParseTuple(a,"Oii:getslice",&a1,&a2,&a3)) if (!PyArg_ParseTuple(a, "Onn:getslice", &a1, &a2, &a3))
return NULL; return NULL;
return PySequence_GetSlice(a1,a2,a3); return PySequence_GetSlice(a1, a2, a3);
} }
static PyObject* static PyObject*
op_setslice(PyObject *s, PyObject *a) op_setslice(PyObject *s, PyObject *a)
{ {
PyObject *a1, *a4; PyObject *a1, *a4;
int a2,a3; Py_ssize_t a2, a3;
if (!PyArg_ParseTuple(a,"OiiO:setslice",&a1,&a2,&a3,&a4)) if (!PyArg_ParseTuple(a, "OnnO:setslice", &a1, &a2, &a3, &a4))
return NULL; return NULL;
if (-1 == PySequence_SetSlice(a1,a2,a3,a4)) if (-1 == PySequence_SetSlice(a1, a2, a3, a4))
return NULL; return NULL;
Py_INCREF(Py_None); Py_RETURN_NONE;
return Py_None;
} }
static PyObject* static PyObject*
op_delslice(PyObject *s, PyObject *a) op_delslice(PyObject *s, PyObject *a)
{ {
PyObject *a1; PyObject *a1;
int a2,a3; Py_ssize_t a2, a3;
if(! PyArg_ParseTuple(a,"Oii:delslice",&a1,&a2,&a3)) if (!PyArg_ParseTuple(a, "Onn:delslice", &a1, &a2, &a3))
return NULL; return NULL;
if (-1 == PySequence_DelSlice(a1,a2,a3)) if (-1 == PySequence_DelSlice(a1, a2, a3))
return NULL; return NULL;
Py_INCREF(Py_None); Py_RETURN_NONE;
return Py_None;
} }
#undef spam1 #undef spam1
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment