mirror of https://github.com/python/cpython
asyncio: Only allow Unix Stream sockets for loop.create_unix_server/connection
This commit is contained in:
parent
95cdf364c8
commit
36e7e97d62
|
@ -234,6 +234,11 @@ class _UnixSelectorEventLoop(selector_events.BaseSelectorEventLoop):
|
|||
else:
|
||||
if sock is None:
|
||||
raise ValueError('no path and sock were specified')
|
||||
if (sock.family != socket.AF_UNIX or
|
||||
sock.type != socket.SOCK_STREAM):
|
||||
raise ValueError(
|
||||
'A UNIX Domain Stream Socket was expected, got {!r}'
|
||||
.format(sock))
|
||||
sock.setblocking(False)
|
||||
|
||||
transport, protocol = yield from self._create_connection_transport(
|
||||
|
@ -272,9 +277,11 @@ class _UnixSelectorEventLoop(selector_events.BaseSelectorEventLoop):
|
|||
raise ValueError(
|
||||
'path was not specified, and no sock specified')
|
||||
|
||||
if sock.family != socket.AF_UNIX:
|
||||
if (sock.family != socket.AF_UNIX or
|
||||
sock.type != socket.SOCK_STREAM):
|
||||
raise ValueError(
|
||||
'A UNIX Domain Socket was expected, got {!r}'.format(sock))
|
||||
'A UNIX Domain Stream Socket was expected, got {!r}'
|
||||
.format(sock))
|
||||
|
||||
server = base_events.Server(self, [sock])
|
||||
sock.listen(backlog)
|
||||
|
|
|
@ -273,7 +273,16 @@ class SelectorEventLoopUnixSocketTests(test_utils.TestCase):
|
|||
coro = self.loop.create_unix_server(lambda: None, path=None,
|
||||
sock=sock)
|
||||
with self.assertRaisesRegex(ValueError,
|
||||
'A UNIX Domain Socket was expected'):
|
||||
'A UNIX Domain Stream.*was expected'):
|
||||
self.loop.run_until_complete(coro)
|
||||
|
||||
def test_create_unix_connection_path_inetsock(self):
|
||||
sock = socket.socket()
|
||||
with sock:
|
||||
coro = self.loop.create_unix_connection(lambda: None, path=None,
|
||||
sock=sock)
|
||||
with self.assertRaisesRegex(ValueError,
|
||||
'A UNIX Domain Stream.*was expected'):
|
||||
self.loop.run_until_complete(coro)
|
||||
|
||||
@mock.patch('asyncio.unix_events.socket')
|
||||
|
|
Loading…
Reference in New Issue