From: Antoine Pitrou Date: Fri, 3 Nov 2017 19:36:39 +0000 (+0100) Subject: [2.7] bpo-30057: Fix potential missed signal in signal.signal(). (GH-4258) (#4263) X-Git-Tag: v2.7.15rc1~143 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c713837e91f39dc18740c74729cb7cebcf54fe6e;p=python [2.7] bpo-30057: Fix potential missed signal in signal.signal(). (GH-4258) (#4263) Bug report and patch by Jeroen Demeyer.. (cherry picked from commit f6f90ff079a22b79a58d47b6117cc8a8c7d366f3) --- diff --git a/Misc/ACKS b/Misc/ACKS index e076c32b14..dc64293b69 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -324,6 +324,7 @@ Vincent Delft Arnaud Delobelle Konrad Delong Erik Demaine +Jeroen Demeyer Martin Dengler John Dennis L. Peter Deutsch diff --git a/Misc/NEWS.d/next/Library/2017-11-03-19-11-43.bpo-30057.NCaijI.rst b/Misc/NEWS.d/next/Library/2017-11-03-19-11-43.bpo-30057.NCaijI.rst new file mode 100644 index 0000000000..5740eb2500 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2017-11-03-19-11-43.bpo-30057.NCaijI.rst @@ -0,0 +1 @@ +Fix potential missed signal in signal.signal(). diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index c7bf1f0853..ef70d10bb1 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -317,12 +317,15 @@ signal_signal(PyObject *self, PyObject *args) } else func = signal_handler; + /* Check for pending signals before changing signal handler */ + if (PyErr_CheckSignals()) { + return NULL; + } if (PyOS_setsig(sig_num, func) == SIG_ERR) { PyErr_SetFromErrno(PyExc_RuntimeError); return NULL; } old_handler = Handlers[sig_num].func; - Handlers[sig_num].tripped = 0; Py_INCREF(obj); Handlers[sig_num].func = obj; if (old_handler != NULL)