Skip to content

Commit 3fc4ab7

Browse files
committed
bpo-41344: raise ValueError when creating shared memory of size 0
1 parent 1332226 commit 3fc4ab7

File tree

3 files changed

+15
-0
lines changed

3 files changed

+15
-0
lines changed

Lib/multiprocessing/shared_memory.py

Lines changed: 2 additions & 0 deletions
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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3878,6 +3878,18 @@ class OptionalAttachSharedMemory(shared_memory.SharedMemory):
38783878

38793879
sms.close()
38803880

3881+
# Test creating a shared memory segment with negative size
3882+
with self.assertRaises(ValueError):
3883+
sms_invalid = shared_memory.SharedMemory(create=True, size=-1)
3884+
3885+
# Test creating a shared memory segment with size 0
3886+
with self.assertRaises(ValueError):
3887+
sms_invalid = shared_memory.SharedMemory(create=True, size=0)
3888+
3889+
# Test creating a shared memory segment without size argument
3890+
with self.assertRaises(ValueError):
3891+
sms_invalid = shared_memory.SharedMemory(create=True)
3892+
38813893
def test_shared_memory_across_processes(self):
38823894
# bpo-40135: don't define shared memory block's name in case of
38833895
# the failure when we run multiprocessing tests in parallel.
Lines changed: 1 addition & 0 deletions
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)