diff options
-rw-r--r-- | Modules/timemodule.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/Modules/timemodule.c b/Modules/timemodule.c index fa7a635..cebcc68 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -835,10 +835,17 @@ floatsleep(double secs) } #else /* !MSDOS */ #ifdef MS_WIN32 - /* XXX Can't interrupt this sleep */ - Py_BEGIN_ALLOW_THREADS - Sleep((int)(secs*1000)); - Py_END_ALLOW_THREADS + { + double millisecs = secs * 1000.0; + if (millisecs > (double)ULONG_MAX) { + PyErr_SetString(PyExc_OverflowError, "sleep length is too large"); + return -1; + } + /* XXX Can't interrupt this sleep */ + Py_BEGIN_ALLOW_THREADS + Sleep((unsigned long)millisecs); + Py_END_ALLOW_THREADS + } #else /* !MS_WIN32 */ #ifdef PYOS_OS2 /* This Sleep *IS* Interruptable by Exceptions */ |