diff options
author | Ritvik Pasham <ritvikpasham@gmail.com> | 2024-11-13 11:51:01 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-11-13 11:51:01 (GMT) |
commit | a12690ef49e8fc8a3af4c5f1757eb3caffb35e03 (patch) | |
tree | cbb2fae853e1123469b8441d4e7943faa16fcbe9 | |
parent | ba088c8f9cf7163b0f28c507cb1343befe21997e (diff) | |
download | cpython-a12690ef49e8fc8a3af4c5f1757eb3caffb35e03.zip cpython-a12690ef49e8fc8a3af4c5f1757eb3caffb35e03.tar.gz cpython-a12690ef49e8fc8a3af4c5f1757eb3caffb35e03.tar.bz2 |
gh-126341: add release check to `__iter__` method of `memoryview` (#126759)
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>
-rw-r--r-- | Lib/test/test_buffer.py | 2 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Core_and_Builtins/2024-11-12-19-24-00.gh-issue-126341.5SdAe1.rst | 1 | ||||
-rw-r--r-- | Objects/memoryobject.c | 1 |
3 files changed, 4 insertions, 0 deletions
diff --git a/Lib/test/test_buffer.py b/Lib/test/test_buffer.py index ae938d1..cb38a69 100644 --- a/Lib/test/test_buffer.py +++ b/Lib/test/test_buffer.py @@ -3910,6 +3910,8 @@ class TestBufferProtocol(unittest.TestCase): self.assertRaises(ValueError, memoryview, m) # memoryview.cast() self.assertRaises(ValueError, m.cast, 'c') + # memoryview.__iter__() + self.assertRaises(ValueError, m.__iter__) # getbuffer() self.assertRaises(ValueError, ndarray, m) # memoryview.tolist() diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2024-11-12-19-24-00.gh-issue-126341.5SdAe1.rst b/Misc/NEWS.d/next/Core_and_Builtins/2024-11-12-19-24-00.gh-issue-126341.5SdAe1.rst new file mode 100644 index 0000000..c2436d2 --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2024-11-12-19-24-00.gh-issue-126341.5SdAe1.rst @@ -0,0 +1 @@ +Now :exc:`ValueError` is raised instead of :exc:`SystemError` when trying to iterate over a released :class:`memoryview` object. diff --git a/Objects/memoryobject.c b/Objects/memoryobject.c index d4672e8..25634f9 100644 --- a/Objects/memoryobject.c +++ b/Objects/memoryobject.c @@ -3356,6 +3356,7 @@ memory_iter(PyObject *seq) PyErr_BadInternalCall(); return NULL; } + CHECK_RELEASED(seq); PyMemoryViewObject *obj = (PyMemoryViewObject *)seq; int ndims = obj->view.ndim; if (ndims == 0) { |