diff options
Diffstat (limited to 'Modules/signalmodule.c')
| -rw-r--r-- | Modules/signalmodule.c | 15 | 
1 files changed, 15 insertions, 0 deletions
diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index 9dc781d..8675978 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -255,8 +255,23 @@ signal_signal(PyObject *self, PyObject *args)      int sig_num;      PyObject *old_handler;      void (*func)(int); +#ifdef MS_WINDOWS +    int cur_sig, num_valid_sigs = 6; +    static int valid_sigs[] = {SIGABRT, SIGFPE, SIGILL, SIGINT, +                               SIGSEGV, SIGTERM}; +    BOOL valid_sig = FALSE; +#endif      if (!PyArg_ParseTuple(args, "iO:signal", &sig_num, &obj))          return NULL; +#ifdef MS_WINDOWS +    /* Validate that sig_num is one of the allowable signals */ +    for (cur_sig = 0; cur_sig < num_valid_sigs; cur_sig++) +        valid_sig |= (sig_num == valid_sigs[cur_sig]); +    if (!valid_sig) { +        PyErr_SetString(PyExc_ValueError, "signal number out of range"); +        return NULL; +    } +#endif  #ifdef WITH_THREAD      if (PyThread_get_thread_ident() != main_thread) {          PyErr_SetString(PyExc_ValueError,  | 
