]> granicus.if.org Git - python/commitdiff
Trent Mick <trentm@activestate.com>:
authorFred Drake <fdrake@acm.org>
Thu, 29 Jun 2000 21:31:02 +0000 (21:31 +0000)
committerFred Drake <fdrake@acm.org>
Thu, 29 Jun 2000 21:31:02 +0000 (21:31 +0000)
This patch fixes a possible overflow in the Sleep system call on
Win32/64 in the time_sleep() function in the time module. For very
large values of the give time to sleep the number of milliseconds can
overflow and give unexpected sleep intervals. THis patch raises an
OverflowError if the value overflows.

Closes SourceForge patch #100514.

Modules/timemodule.c

index fa7a6358fa5fd3d7b896cf96f1ece752ce47c504..cebcc68fc86df9d76e6750740a861514878a6712 100644 (file)
@@ -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 */