]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.12] gh-126341: add release check to `__iter__` method of `memoryview` (GH-126759...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Wed, 13 Nov 2024 18:44:01 +0000 (19:44 +0100)
committerGitHub <noreply@github.com>
Wed, 13 Nov 2024 18:44:01 +0000 (20:44 +0200)
gh-126341: add release check to `__iter__` method of `memoryview` (GH-126759)
(cherry picked from commit a12690ef49e8fc8a3af4c5f1757eb3caffb35e03)

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>
Lib/test/test_buffer.py
Misc/NEWS.d/next/Core_and_Builtins/2024-11-12-19-24-00.gh-issue-126341.5SdAe1.rst [new file with mode: 0644]
Objects/memoryobject.c

index aafbb8a993def53f2027168b2b7bd8274634a6e8..84a34bccbc9af156aba1add2de6853a913569caa 100644 (file)
@@ -3906,6 +3906,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 (file)
index 0000000..c2436d2
--- /dev/null
@@ -0,0 +1 @@
+Now :exc:`ValueError` is raised instead of :exc:`SystemError` when trying to iterate over a released :class:`memoryview` object.
index 26871612ea794d312e793b529b27c3edea049ed6..9a5f9c665b2a9f54f8a2e34a0ca22e41bb4581fe 100644 (file)
@@ -3322,6 +3322,7 @@ memory_iter(PyObject *seq)
         PyErr_BadInternalCall();
         return NULL;
     }
+    CHECK_RELEASED(seq);
     PyMemoryViewObject *obj = (PyMemoryViewObject *)seq;
     int ndims = obj->view.ndim;
     if (ndims == 0) {