[2.7] bpo-33767: Fix improper use of SystemError by mmap.mmap objects (GH-7381) (GH-7432)
Raise TypeError instead of SystemError for unsupported operations.
(cherry picked from commit e9e3976057
)
Co-authored-by: Zackery Spytz <zspytz@gmail.com>
This commit is contained in:
parent
bc3df70b26
commit
3014d6eb7f
|
@ -666,6 +666,13 @@ class MmapTests(unittest.TestCase):
|
|||
self.assertRaises(ValueError, m.write_byte, 'b')
|
||||
self.assertRaises(ValueError, m.write, 'abc')
|
||||
|
||||
def test_concat_repeat_exception(self):
|
||||
m = mmap.mmap(-1, 16)
|
||||
with self.assertRaises(TypeError):
|
||||
m + m
|
||||
with self.assertRaises(TypeError):
|
||||
m * 2
|
||||
|
||||
|
||||
class LargeMmapTests(unittest.TestCase):
|
||||
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
The concatenation (``+``) and repetition (``*``) sequence operations now
|
||||
raise :exc:`TypeError` instead of :exc:`SystemError` when performed on
|
||||
:class:`mmap.mmap` objects. Patch by Zackery Spytz.
|
|
@ -818,24 +818,6 @@ mmap_subscript(mmap_object *self, PyObject *item)
|
|||
}
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
mmap_concat(mmap_object *self, PyObject *bb)
|
||||
{
|
||||
CHECK_VALID(NULL);
|
||||
PyErr_SetString(PyExc_SystemError,
|
||||
"mmaps don't support concatenation");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
mmap_repeat(mmap_object *self, Py_ssize_t n)
|
||||
{
|
||||
CHECK_VALID(NULL);
|
||||
PyErr_SetString(PyExc_SystemError,
|
||||
"mmaps don't support repeat operation");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int
|
||||
mmap_ass_slice(mmap_object *self, Py_ssize_t ilow, Py_ssize_t ihigh, PyObject *v)
|
||||
{
|
||||
|
@ -993,8 +975,8 @@ mmap_ass_subscript(mmap_object *self, PyObject *item, PyObject *value)
|
|||
|
||||
static PySequenceMethods mmap_as_sequence = {
|
||||
(lenfunc)mmap_length, /*sq_length*/
|
||||
(binaryfunc)mmap_concat, /*sq_concat*/
|
||||
(ssizeargfunc)mmap_repeat, /*sq_repeat*/
|
||||
0, /*sq_concat*/
|
||||
0, /*sq_repeat*/
|
||||
(ssizeargfunc)mmap_item, /*sq_item*/
|
||||
(ssizessizeargfunc)mmap_slice, /*sq_slice*/
|
||||
(ssizeobjargproc)mmap_ass_item, /*sq_ass_item*/
|
||||
|
|
Loading…
Reference in New Issue