[3.11] gh-115886: Handle embedded null characters in shared memory name (GH-115887) (GH-115907)

shm_open() and shm_unlink() now check for embedded null characters in
the name and raise an error instead of silently truncating it.
(cherry picked from commit 79811ededd)
This commit is contained in:
Serhiy Storchaka 2024-02-25 13:12:07 +02:00 committed by GitHub
parent c6455ff0fd
commit f2b1f6b828
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 30 additions and 3 deletions

View file

@ -3932,6 +3932,21 @@ class _TestSharedMemory(BaseTestCase):
# test_multiprocessing_spawn, etc) in parallel.
return prefix + str(os.getpid())
def test_shared_memory_name_with_embedded_null(self):
name_tsmb = self._new_shm_name('test01_null')
sms = shared_memory.SharedMemory(name_tsmb, create=True, size=512)
self.addCleanup(sms.unlink)
with self.assertRaises(ValueError):
shared_memory.SharedMemory(name_tsmb + '\0a', create=False, size=512)
if shared_memory._USE_POSIX:
orig_name = sms._name
try:
sms._name = orig_name + '\0a'
with self.assertRaises(ValueError):
sms.unlink()
finally:
sms._name = orig_name
def test_shared_memory_basics(self):
name_tsmb = self._new_shm_name('test01_tsmb')
sms = shared_memory.SharedMemory(name_tsmb, create=True, size=512)
@ -4066,7 +4081,7 @@ class _TestSharedMemory(BaseTestCase):
self.addCleanup(shm2.unlink)
self.assertEqual(shm2._name, names[1])
def test_invalid_shared_memory_cration(self):
def test_invalid_shared_memory_creation(self):
# Test creating a shared memory segment with negative size
with self.assertRaises(ValueError):
sms_invalid = shared_memory.SharedMemory(create=True, size=-1)