bpo-37840: Fix handling of negative indices in bytearray_getitem() (GH-15250)
This commit is contained in:
parent
915cd3f069
commit
92709a263e
|
@ -962,6 +962,15 @@ class BaseBytesTest:
|
|||
c = b.translate(None, delete=b'e')
|
||||
self.assertEqual(c, b'hllo')
|
||||
|
||||
def test_sq_item(self):
|
||||
_testcapi = test.support.import_module('_testcapi')
|
||||
obj = self.type2test((42,))
|
||||
with self.assertRaises(IndexError):
|
||||
_testcapi.sequence_getitem(obj, -2)
|
||||
with self.assertRaises(IndexError):
|
||||
_testcapi.sequence_getitem(obj, 1)
|
||||
self.assertEqual(_testcapi.sequence_getitem(obj, 0), 42)
|
||||
|
||||
|
||||
class BytesTest(BaseBytesTest, unittest.TestCase):
|
||||
type2test = bytes
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
Fix handling of negative indices in :c:member:`~PySequenceMethods.sq_item`
|
||||
of :class:`bytearray`. Patch by Sergey Fedoseev.
|
|
@ -5164,6 +5164,18 @@ test_write_unraisable_exc(PyObject *self, PyObject *args)
|
|||
}
|
||||
|
||||
|
||||
static PyObject *
|
||||
sequence_getitem(PyObject *self, PyObject *args)
|
||||
{
|
||||
PyObject *seq;
|
||||
Py_ssize_t i;
|
||||
if (!PyArg_ParseTuple(args, "On", &seq, &i)) {
|
||||
return NULL;
|
||||
}
|
||||
return PySequence_GetItem(seq, i);
|
||||
}
|
||||
|
||||
|
||||
static PyMethodDef TestMethods[] = {
|
||||
{"raise_exception", raise_exception, METH_VARARGS},
|
||||
{"raise_memoryerror", raise_memoryerror, METH_NOARGS},
|
||||
|
@ -5413,6 +5425,7 @@ static PyMethodDef TestMethods[] = {
|
|||
{"negative_refcount", negative_refcount, METH_NOARGS},
|
||||
#endif
|
||||
{"write_unraisable_exc", test_write_unraisable_exc, METH_VARARGS},
|
||||
{"sequence_getitem", sequence_getitem, METH_VARARGS},
|
||||
{NULL, NULL} /* sentinel */
|
||||
};
|
||||
|
||||
|
|
|
@ -381,8 +381,6 @@ bytearray_irepeat(PyByteArrayObject *self, Py_ssize_t count)
|
|||
static PyObject *
|
||||
bytearray_getitem(PyByteArrayObject *self, Py_ssize_t i)
|
||||
{
|
||||
if (i < 0)
|
||||
i += Py_SIZE(self);
|
||||
if (i < 0 || i >= Py_SIZE(self)) {
|
||||
PyErr_SetString(PyExc_IndexError, "bytearray index out of range");
|
||||
return NULL;
|
||||
|
|
Loading…
Reference in New Issue