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))
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):