gh-112804: Clamping timeout value for _PySemaphore_PlatformWait (gh-124914)

* gh-112804: Clamping timeout value for _PySemaphore_PlatformWait

* Address code review

* nit
This commit is contained in:
Donghee Na 2024-10-05 11:27:32 +09:00 committed by GitHub
parent adfe7657a3
commit a5fc50994a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 8 additions and 1 deletions

View File

@ -102,7 +102,14 @@ _PySemaphore_PlatformWait(_PySemaphore *sema, PyTime_t timeout)
millis = INFINITE; millis = INFINITE;
} }
else { 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); wait = WaitForSingleObjectEx(sema->platform_sem, millis, FALSE);
if (wait == WAIT_OBJECT_0) { if (wait == WAIT_OBJECT_0) {