Skip to content

Commit 475a5fb

Browse files
authored
bpo-41344: Raise ValueError when creating shared memory of size 0 (pythonGH-21556)
1 parent 582f137 commit 475a5fb

File tree

3 files changed

+15
-0
lines changed

3 files changed

+15
-0
lines changed

Lib/multiprocessing/shared_memory.py

+2
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ def __init__(self, name=None, create=False, size=0):
7676
raise ValueError("'size' must be a positive integer")
7777
if create:
7878
self._flags = _O_CREX | os.O_RDWR
79+
if size == 0:
80+
raise ValueError("'size' must be a positive number different from zero")
7981
if name is None and not self._flags & os.O_EXCL:
8082
raise ValueError("'name' can only be None if create=True")
8183

Lib/test/_test_multiprocessing.py

+12
Original file line numberDiff line numberDiff line change
@@ -3880,6 +3880,18 @@ class OptionalAttachSharedMemory(shared_memory.SharedMemory):
38803880

38813881
sms.close()
38823882

3883+
# Test creating a shared memory segment with negative size
3884+
with self.assertRaises(ValueError):
3885+
sms_invalid = shared_memory.SharedMemory(create=True, size=-1)
3886+
3887+
# Test creating a shared memory segment with size 0
3888+
with self.assertRaises(ValueError):
3889+
sms_invalid = shared_memory.SharedMemory(create=True, size=0)
3890+
3891+
# Test creating a shared memory segment without size argument
3892+
with self.assertRaises(ValueError):
3893+
sms_invalid = shared_memory.SharedMemory(create=True)
3894+
38833895
def test_shared_memory_across_processes(self):
38843896
# bpo-40135: don't define shared memory block's name in case of
38853897
# the failure when we run multiprocessing tests in parallel.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Prevent creating :class:`shared_memory.SharedMemory` objects with :code:`size=0`.

0 commit comments

Comments
 (0)