[3.12] gh-126341: add release check to __iter__ method of memoryview (GH-126759) (#126779)

gh-126341: add release check to `__iter__` method of `memoryview` (GH-126759)
(cherry picked from commit a12690ef49)

Co-authored-by: Ritvik Pasham <ritvikpasham@gmail.com>
Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com>
Co-authored-by: Peter Bierma <zintensitydev@gmail.com>
Co-authored-by: Victor Stinner <vstinner@python.org>
Co-authored-by: sobolevn <mail@sobolevn.me>
This commit is contained in:
Miss Islington (bot) 2024-11-13 19:44:01 +01:00 committed by GitHub
parent dd21259283
commit 0bdcc84ae9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 4 additions and 0 deletions

View file

@ -3906,6 +3906,8 @@ class TestBufferProtocol(unittest.TestCase):
self.assertRaises(ValueError, memoryview, m) self.assertRaises(ValueError, memoryview, m)
# memoryview.cast() # memoryview.cast()
self.assertRaises(ValueError, m.cast, 'c') self.assertRaises(ValueError, m.cast, 'c')
# memoryview.__iter__()
self.assertRaises(ValueError, m.__iter__)
# getbuffer() # getbuffer()
self.assertRaises(ValueError, ndarray, m) self.assertRaises(ValueError, ndarray, m)
# memoryview.tolist() # memoryview.tolist()

View file

@ -0,0 +1 @@
Now :exc:`ValueError` is raised instead of :exc:`SystemError` when trying to iterate over a released :class:`memoryview` object.

View file

@ -3322,6 +3322,7 @@ memory_iter(PyObject *seq)
PyErr_BadInternalCall(); PyErr_BadInternalCall();
return NULL; return NULL;
} }
CHECK_RELEASED(seq);
PyMemoryViewObject *obj = (PyMemoryViewObject *)seq; PyMemoryViewObject *obj = (PyMemoryViewObject *)seq;
int ndims = obj->view.ndim; int ndims = obj->view.ndim;
if (ndims == 0) { if (ndims == 0) {