gh-112804: Clamping timeout value for _PySemaphore_PlatformWait (gh-124914)
* gh-112804: Clamping timeout value for _PySemaphore_PlatformWait
* Address code review
* nit
(cherry picked from commit
a5fc50994a3fae46d0c3d496c4e1d5e00548a1b8)
Co-authored-by: Donghee Na <donghee.na@python.org>
millis = INFINITE;
}
else {
- millis = (DWORD) (timeout / 1000000);
+ PyTime_t div = _PyTime_AsMilliseconds(timeout, _PyTime_ROUND_TIMEOUT);
+ // Prevent overflow with clamping the result
+ if ((PyTime_t)PY_DWORD_MAX < div) {
+ millis = PY_DWORD_MAX;
+ }
+ else {
+ millis = (DWORD) div;
+ }
}
wait = WaitForSingleObjectEx(sema->platform_sem, millis, FALSE);
if (wait == WAIT_OBJECT_0) {