Commit e36fcde3 authored by Guido van Rossum's avatar Guido van Rossum

- Issue #22841: Reject coroutines in asyncio add_signal_handler().

  Patch by Ludovic.Gasc.
parent 6c14f231
...@@ -13,6 +13,7 @@ import threading ...@@ -13,6 +13,7 @@ import threading
from . import base_events from . import base_events
from . import base_subprocess from . import base_subprocess
from . import constants from . import constants
from . import coroutines
from . import events from . import events
from . import selector_events from . import selector_events
from . import selectors from . import selectors
...@@ -66,6 +67,8 @@ class _UnixSelectorEventLoop(selector_events.BaseSelectorEventLoop): ...@@ -66,6 +67,8 @@ class _UnixSelectorEventLoop(selector_events.BaseSelectorEventLoop):
Raise ValueError if the signal number is invalid or uncatchable. Raise ValueError if the signal number is invalid or uncatchable.
Raise RuntimeError if there is a problem setting up the handler. Raise RuntimeError if there is a problem setting up the handler.
""" """
if coroutines.iscoroutinefunction(callback):
raise TypeError("coroutines cannot be used with call_soon()")
self._check_signal(sig) self._check_signal(sig)
try: try:
# set_wakeup_fd() raises ValueError if this is not the # set_wakeup_fd() raises ValueError if this is not the
......
...@@ -63,6 +63,18 @@ class SelectorEventLoopSignalTests(test_utils.TestCase): ...@@ -63,6 +63,18 @@ class SelectorEventLoopSignalTests(test_utils.TestCase):
self.loop.add_signal_handler, self.loop.add_signal_handler,
signal.SIGINT, lambda: True) signal.SIGINT, lambda: True)
@mock.patch('asyncio.unix_events.signal')
def test_add_signal_handler_coroutine_error(self, m_signal):
@asyncio.coroutine
def simple_coroutine():
yield from []
self.assertRaises(
TypeError,
self.loop.add_signal_handler,
signal.SIGINT, simple_coroutine)
@mock.patch('asyncio.unix_events.signal') @mock.patch('asyncio.unix_events.signal')
def test_add_signal_handler(self, m_signal): def test_add_signal_handler(self, m_signal):
m_signal.NSIG = signal.NSIG m_signal.NSIG = signal.NSIG
......
...@@ -36,6 +36,9 @@ Core and Builtins ...@@ -36,6 +36,9 @@ Core and Builtins
Library Library
------- -------
- Issue #22841: Reject coroutines in asyncio add_signal_handler().
Patch by Ludovic.Gasc.
- Issue #22849: Fix possible double free in the io.TextIOWrapper constructor. - Issue #22849: Fix possible double free in the io.TextIOWrapper constructor.
- Issue #12728: Different Unicode characters having the same uppercase but - Issue #12728: Different Unicode characters having the same uppercase but
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment