From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Wed, 13 Nov 2024 18:44:01 +0000 (+0100) Subject: [3.12] gh-126341: add release check to `__iter__` method of `memoryview` (GH-126759... X-Git-Tag: v3.12.8~73 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0bdcc84ae99ff695b10b2f13c5a00497ce0840e5;p=thirdparty%2FPython%2Fcpython.git [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 a12690ef49e8fc8a3af4c5f1757eb3caffb35e03) Co-authored-by: Ritvik Pasham Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com> Co-authored-by: Peter Bierma Co-authored-by: Victor Stinner Co-authored-by: sobolevn --- diff --git a/Lib/test/test_buffer.py b/Lib/test/test_buffer.py index aafbb8a993de..84a34bccbc9a 100644 --- a/Lib/test/test_buffer.py +++ b/Lib/test/test_buffer.py @@ -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 index 000000000000..c2436d2ebf4d --- /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 26871612ea79..9a5f9c665b2a 100644 --- a/Objects/memoryobject.c +++ b/Objects/memoryobject.c @@ -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) {