https://github.com/python/cpython/commit/f52de8a937e89a4d1cf314f12ee5e7bbaa79e7da
commit: f52de8a937e89a4d1cf314f12ee5e7bbaa79e7da
branch: main
author: Tomas R. <[email protected]>
committer: serhiy-storchaka <[email protected]>
date: 2025-05-09T11:46:45+03:00
summary:
gh-133017: Improve error message for invalid typecodes in
multiprocessing.{Array,Value} (GH-133252)
files:
A Misc/NEWS.d/next/Library/2025-05-01-16-03-11.gh-issue-133017.k7RLQp.rst
M Lib/multiprocessing/sharedctypes.py
M Lib/test/_test_multiprocessing.py
diff --git a/Lib/multiprocessing/sharedctypes.py
b/Lib/multiprocessing/sharedctypes.py
index 6071707027bea4..eee1172e6e9135 100644
--- a/Lib/multiprocessing/sharedctypes.py
+++ b/Lib/multiprocessing/sharedctypes.py
@@ -37,7 +37,12 @@
#
def _new_value(type_):
- size = ctypes.sizeof(type_)
+ try:
+ size = ctypes.sizeof(type_)
+ except TypeError as e:
+ raise TypeError("bad typecode (must be a ctypes type or one of "
+ "c, b, B, u, h, H, i, I, l, L, q, Q, f or d)") from e
+
wrapper = heap.BufferWrapper(size)
return rebuild_ctype(type_, wrapper, None)
diff --git a/Lib/test/_test_multiprocessing.py
b/Lib/test/_test_multiprocessing.py
index 4dc9a31d22f771..1b690cb88bfc57 100644
--- a/Lib/test/_test_multiprocessing.py
+++ b/Lib/test/_test_multiprocessing.py
@@ -2463,6 +2463,12 @@ def test_getobj_getlock(self):
self.assertNotHasAttr(arr5, 'get_lock')
self.assertNotHasAttr(arr5, 'get_obj')
+ @unittest.skipIf(c_int is None, "requires _ctypes")
+ def test_invalid_typecode(self):
+ with self.assertRaisesRegex(TypeError, 'bad typecode'):
+ self.Value('x', None)
+ with self.assertRaisesRegex(TypeError, 'bad typecode'):
+ self.RawValue('x', None)
class _TestArray(BaseTestCase):
@@ -2543,6 +2549,12 @@ def test_getobj_getlock_obj(self):
self.assertNotHasAttr(arr5, 'get_lock')
self.assertNotHasAttr(arr5, 'get_obj')
+ @unittest.skipIf(c_int is None, "requires _ctypes")
+ def test_invalid_typecode(self):
+ with self.assertRaisesRegex(TypeError, 'bad typecode'):
+ self.Array('x', [])
+ with self.assertRaisesRegex(TypeError, 'bad typecode'):
+ self.RawArray('x', [])
#
#
#
diff --git
a/Misc/NEWS.d/next/Library/2025-05-01-16-03-11.gh-issue-133017.k7RLQp.rst
b/Misc/NEWS.d/next/Library/2025-05-01-16-03-11.gh-issue-133017.k7RLQp.rst
new file mode 100644
index 00000000000000..1b5bf74fb47e33
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2025-05-01-16-03-11.gh-issue-133017.k7RLQp.rst
@@ -0,0 +1,4 @@
+Improve the error message of :func:`multiprocessing.sharedctypes.Array`,
+:func:`multiprocessing.sharedctypes.RawArray`,
:func:`multiprocessing.sharedctypes.Value` and
+:func:`multiprocessing.sharedctypes.RawValue` when an invalid typecode is
passed. Patch
+by Tomas Roun
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]