diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2018-06-05 13:25:21 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-05 13:25:21 (GMT) |
commit | ae55d29fe04ee1aeb1bcb2e9b84e5bc9d4ecb070 (patch) | |
tree | 4fbcd9e2371f66a2f90ad553ab3c5f0f74f02442 | |
parent | 0da3f412bc7f998c9db1309b288935eedc03d6d7 (diff) | |
download | cpython-ae55d29fe04ee1aeb1bcb2e9b84e5bc9d4ecb070.zip cpython-ae55d29fe04ee1aeb1bcb2e9b84e5bc9d4ecb070.tar.gz cpython-ae55d29fe04ee1aeb1bcb2e9b84e5bc9d4ecb070.tar.bz2 |
bpo-33767: Fix improper use of SystemError by mmap.mmap objects (GH-7381)
Raise TypeError instead of SystemError for unsupported operations.
(cherry picked from commit e9e397605789b2a67b67558fbbe756b7b88934f5)
Co-authored-by: Zackery Spytz <zspytz@gmail.com>
-rw-r--r-- | Lib/test/test_mmap.py | 7 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2018-06-03-22-41-59.bpo-33767.2e82g3.rst | 3 | ||||
-rw-r--r-- | Modules/mmapmodule.c | 22 |
3 files changed, 12 insertions, 20 deletions
diff --git a/Lib/test/test_mmap.py b/Lib/test/test_mmap.py index 56d85e7..c188a9d 100644 --- a/Lib/test/test_mmap.py +++ b/Lib/test/test_mmap.py @@ -734,6 +734,13 @@ class MmapTests(unittest.TestCase): self.assertRaises(ValueError, m.write_byte, 42) self.assertRaises(ValueError, m.write, b'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): diff --git a/Misc/NEWS.d/next/Library/2018-06-03-22-41-59.bpo-33767.2e82g3.rst b/Misc/NEWS.d/next/Library/2018-06-03-22-41-59.bpo-33767.2e82g3.rst new file mode 100644 index 0000000..3483301 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2018-06-03-22-41-59.bpo-33767.2e82g3.rst @@ -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. diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c index 4a875cc..ebef501 100644 --- a/Modules/mmapmodule.c +++ b/Modules/mmapmodule.c @@ -840,24 +840,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_item(mmap_object *self, Py_ssize_t i, PyObject *v) { @@ -977,8 +959,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*/ 0, /*sq_slice*/ (ssizeobjargproc)mmap_ass_item, /*sq_ass_item*/ |