From 3fc4ab74a811f46e11349fc1a6a276c6deaa9a53 Mon Sep 17 00:00:00 2001 From: Vinay Sharma Date: Sun, 19 Jul 2020 19:25:20 +0530 Subject: [PATCH] bpo-41344: raise ValueError when creating shared memory of size 0 --- Lib/multiprocessing/shared_memory.py | 2 ++ Lib/test/_test_multiprocessing.py | 12 ++++++++++++ .../Library/2020-07-20-13-27-48.bpo-41344.iKipNd.rst | 1 + 3 files changed, 15 insertions(+) create mode 100644 Misc/NEWS.d/next/Library/2020-07-20-13-27-48.bpo-41344.iKipNd.rst diff --git a/Lib/multiprocessing/shared_memory.py b/Lib/multiprocessing/shared_memory.py index a3a5fcf4aba1e7..122b3fcebf3fed 100644 --- a/Lib/multiprocessing/shared_memory.py +++ b/Lib/multiprocessing/shared_memory.py @@ -76,6 +76,8 @@ def __init__(self, name=None, create=False, size=0): raise ValueError("'size' must be a positive integer") if create: self._flags = _O_CREX | os.O_RDWR + if size == 0: + raise ValueError("'size' must be a positive number different from zero") if name is None and not self._flags & os.O_EXCL: raise ValueError("'name' can only be None if create=True") diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py index bde102ae2e0518..edf2d160fcd5ff 100644 --- a/Lib/test/_test_multiprocessing.py +++ b/Lib/test/_test_multiprocessing.py @@ -3878,6 +3878,18 @@ class OptionalAttachSharedMemory(shared_memory.SharedMemory): sms.close() + # Test creating a shared memory segment with negative size + with self.assertRaises(ValueError): + sms_invalid = shared_memory.SharedMemory(create=True, size=-1) + + # Test creating a shared memory segment with size 0 + with self.assertRaises(ValueError): + sms_invalid = shared_memory.SharedMemory(create=True, size=0) + + # Test creating a shared memory segment without size argument + with self.assertRaises(ValueError): + sms_invalid = shared_memory.SharedMemory(create=True) + def test_shared_memory_across_processes(self): # bpo-40135: don't define shared memory block's name in case of # the failure when we run multiprocessing tests in parallel. diff --git a/Misc/NEWS.d/next/Library/2020-07-20-13-27-48.bpo-41344.iKipNd.rst b/Misc/NEWS.d/next/Library/2020-07-20-13-27-48.bpo-41344.iKipNd.rst new file mode 100644 index 00000000000000..475bc9bddb0d54 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-07-20-13-27-48.bpo-41344.iKipNd.rst @@ -0,0 +1 @@ +Prevent creating :class:`shared_memory.SharedMemory` objects with :code:`size=0`.