From 17d417bba668b6a9f8bd871c93e3cc236b579272 Mon Sep 17 00:00:00 2001 From: Ritvik Pasham Date: Tue, 12 Nov 2024 14:14:57 -0500 Subject: [PATCH 1/8] Added release check to iteration method of memoryview object --- Objects/memoryobject.c | 1 + 1 file changed, 1 insertion(+) diff --git a/Objects/memoryobject.c b/Objects/memoryobject.c index d4672e8198cb24..25634f997ac66b 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) { From d456e18dcb12b2d84d032cac2325e4e0f8d54f6e Mon Sep 17 00:00:00 2001 From: "blurb-it[bot]" <43283697+blurb-it[bot]@users.noreply.github.com> Date: Tue, 12 Nov 2024 19:24:01 +0000 Subject: [PATCH 2/8] =?UTF-8?q?=F0=9F=93=9C=F0=9F=A4=96=20Added=20by=20blu?= =?UTF-8?q?rb=5Fit.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2024-11-12-19-24-00.gh-issue-126341.5SdAe1.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2024-11-12-19-24-00.gh-issue-126341.5SdAe1.rst 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 00000000000000..05e2bcaf4e7156 --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2024-11-12-19-24-00.gh-issue-126341.5SdAe1.rst @@ -0,0 +1 @@ +Added a check to require that a memoryview object is not released before iterating through it. Previously, iterating through a memoryview object caused a SystemError. From abc5088f6c0e40e38cf69d125c26085b78e25fb4 Mon Sep 17 00:00:00 2001 From: Ritvik Pasham Date: Tue, 12 Nov 2024 15:13:41 -0500 Subject: [PATCH 3/8] Added testcase for added release check --- Lib/test/memoryview/test_released_iter.py | 24 +++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 Lib/test/memoryview/test_released_iter.py diff --git a/Lib/test/memoryview/test_released_iter.py b/Lib/test/memoryview/test_released_iter.py new file mode 100644 index 00000000000000..ecbf53b82702e0 --- /dev/null +++ b/Lib/test/memoryview/test_released_iter.py @@ -0,0 +1,24 @@ +import unittest + +from unittest import TestCase + + +class TestMemoryViewErrors(TestCase): + def test_memoryview_release(self): + av = memoryview(b"something") + av.release() + + with self.assertRaises(ValueError): + av.__iter__() + + def test_memoryview_direct_iter_no_error(self): + av = memoryview(b"something") + + try: + iterator = av.__iter__() + list(iterator) + except Exception as e: + self.fail(f"Direct __iter__() call raised an exception: {e}") + +if __name__ == "__main__": + unittest.main() \ No newline at end of file From c50fec3224ca147d8144b8b1251e9bdbe5bd1929 Mon Sep 17 00:00:00 2001 From: Ritvik Pasham Date: Tue, 12 Nov 2024 15:18:14 -0500 Subject: [PATCH 4/8] Update Misc/NEWS.d/next/Core_and_Builtins/2024-11-12-19-24-00.gh-issue-126341.5SdAe1.rst Co-authored-by: Peter Bierma --- .../2024-11-12-19-24-00.gh-issue-126341.5SdAe1.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 index 05e2bcaf4e7156..cb7f50c6647c73 100644 --- 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 @@ -1 +1 @@ -Added a check to require that a memoryview object is not released before iterating through it. Previously, iterating through a memoryview object caused a SystemError. +Fixed :class:`SystemError` when trying to iterate over a released :class:`memoryview` object. From 5d857d18760f488d3951387fe2c44ba206ebb98a Mon Sep 17 00:00:00 2001 From: Ritvik Pasham Date: Tue, 12 Nov 2024 15:19:58 -0500 Subject: [PATCH 5/8] Fixed linting issue --- Lib/test/memoryview/test_released_iter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/test/memoryview/test_released_iter.py b/Lib/test/memoryview/test_released_iter.py index ecbf53b82702e0..e320da00f997a6 100644 --- a/Lib/test/memoryview/test_released_iter.py +++ b/Lib/test/memoryview/test_released_iter.py @@ -21,4 +21,4 @@ def test_memoryview_direct_iter_no_error(self): self.fail(f"Direct __iter__() call raised an exception: {e}") if __name__ == "__main__": - unittest.main() \ No newline at end of file + unittest.main() From 17db5b42a48336e891ecd0b17c1cb1303b4dbf60 Mon Sep 17 00:00:00 2001 From: Ritvik Pasham Date: Tue, 12 Nov 2024 15:29:39 -0500 Subject: [PATCH 6/8] Corrected trailing whitespace --- Lib/test/memoryview/test_released_iter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/test/memoryview/test_released_iter.py b/Lib/test/memoryview/test_released_iter.py index e320da00f997a6..51632b71b16fc3 100644 --- a/Lib/test/memoryview/test_released_iter.py +++ b/Lib/test/memoryview/test_released_iter.py @@ -13,7 +13,7 @@ def test_memoryview_release(self): def test_memoryview_direct_iter_no_error(self): av = memoryview(b"something") - + try: iterator = av.__iter__() list(iterator) From 61cae743f89133b95cbaf0b0088f349f6ce534a0 Mon Sep 17 00:00:00 2001 From: Ritvik Pasham Date: Tue, 12 Nov 2024 16:10:36 -0500 Subject: [PATCH 7/8] added release check on iter to memoryview object and deleted previous tests --- Lib/test/memoryview/test_released_iter.py | 24 ----------------------- Lib/test/test_buffer.py | 2 ++ 2 files changed, 2 insertions(+), 24 deletions(-) delete mode 100644 Lib/test/memoryview/test_released_iter.py diff --git a/Lib/test/memoryview/test_released_iter.py b/Lib/test/memoryview/test_released_iter.py deleted file mode 100644 index 51632b71b16fc3..00000000000000 --- a/Lib/test/memoryview/test_released_iter.py +++ /dev/null @@ -1,24 +0,0 @@ -import unittest - -from unittest import TestCase - - -class TestMemoryViewErrors(TestCase): - def test_memoryview_release(self): - av = memoryview(b"something") - av.release() - - with self.assertRaises(ValueError): - av.__iter__() - - def test_memoryview_direct_iter_no_error(self): - av = memoryview(b"something") - - try: - iterator = av.__iter__() - list(iterator) - except Exception as e: - self.fail(f"Direct __iter__() call raised an exception: {e}") - -if __name__ == "__main__": - unittest.main() diff --git a/Lib/test/test_buffer.py b/Lib/test/test_buffer.py index ae938d12c9401b..cb38a69e390f3a 100644 --- a/Lib/test/test_buffer.py +++ b/Lib/test/test_buffer.py @@ -3910,6 +3910,8 @@ def test_memoryview_check_released(self): 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() From a1fe1200f132e6d2985936745d63bda746d95fb7 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 13 Nov 2024 12:18:19 +0100 Subject: [PATCH 8/8] Update Misc/NEWS.d/next/Core_and_Builtins/2024-11-12-19-24-00.gh-issue-126341.5SdAe1.rst Co-authored-by: sobolevn --- .../2024-11-12-19-24-00.gh-issue-126341.5SdAe1.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 index cb7f50c6647c73..c2436d2ebf4d09 100644 --- 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 @@ -1 +1 @@ -Fixed :class:`SystemError` when trying to iterate over a released :class:`memoryview` object. +Now :exc:`ValueError` is raised instead of :exc:`SystemError` when trying to iterate over a released :class:`memoryview` object.