mirror of
https://github.com/python/cpython
synced 2024-10-14 19:21:29 +00:00
gh-96819: multiprocessing.resource_tracker: check if length of pipe write <= 512 (#96890)
Co-authored-by: Kumar Aditya <59607654+kumaraditya303@users.noreply.github.com>
This commit is contained in:
parent
14d4f68ebb
commit
19ca114645
|
@ -161,10 +161,10 @@ def unregister(self, name, rtype):
|
|||
def _send(self, cmd, name, rtype):
|
||||
self.ensure_running()
|
||||
msg = '{0}:{1}:{2}\n'.format(cmd, name, rtype).encode('ascii')
|
||||
if len(name) > 512:
|
||||
if len(msg) > 512:
|
||||
# posix guarantees that writes to a pipe of less than PIPE_BUF
|
||||
# bytes are atomic, and that PIPE_BUF >= 512
|
||||
raise ValueError('name too long')
|
||||
raise ValueError('msg too long')
|
||||
nbytes = os.write(self._fd, msg)
|
||||
assert nbytes == len(msg), "nbytes {0:n} but len(msg) {1:n}".format(
|
||||
nbytes, len(msg))
|
||||
|
|
|
@ -5432,6 +5432,14 @@ def test_resource_tracker_reused(self):
|
|||
|
||||
self.assertTrue(is_resource_tracker_reused)
|
||||
|
||||
def test_too_long_name_resource(self):
|
||||
# gh-96819: Resource names that will make the length of a write to a pipe
|
||||
# greater than PIPE_BUF are not allowed
|
||||
rtype = "shared_memory"
|
||||
too_long_name_resource = "a" * (512 - len(rtype))
|
||||
with self.assertRaises(ValueError):
|
||||
resource_tracker.register(too_long_name_resource, rtype)
|
||||
|
||||
|
||||
class TestSimpleQueue(unittest.TestCase):
|
||||
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Fixed check in :mod:`multiprocessing.resource_tracker` that guarantees that the length of a write to a pipe is not greater than ``PIPE_BUF``.
|
Loading…
Reference in a new issue