Piotr Caban : server: Don't overflow if timeout doesn't fit into int range in get_next_timeout.

Alexandre Julliard julliard at winehq.org
Mon Sep 21 15:12:15 CDT 2020


Module: wine
Branch: master
Commit: 3541deb0c3a64d3474a96728d259907180fd7cf6
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=3541deb0c3a64d3474a96728d259907180fd7cf6

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Sun Sep 20 15:59:52 2020 +0200

server: Don't overflow if timeout doesn't fit into int range in get_next_timeout.

Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 server/fd.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/server/fd.c b/server/fd.c
index a88ba39ef0..59db13bae5 100644
--- a/server/fd.c
+++ b/server/fd.c
@@ -953,16 +953,18 @@ static int get_next_timeout(void)
         if ((ptr = list_head( &abs_timeout_list )) != NULL)
         {
             struct timeout_user *timeout = LIST_ENTRY( ptr, struct timeout_user, entry );
-            int diff = (timeout->when - current_time + 9999) / 10000;
-            if (diff < 0) diff = 0;
+            timeout_t diff = (timeout->when - current_time + 9999) / 10000;
+            if (diff > INT_MAX) diff = INT_MAX;
+            else if (diff < 0) diff = 0;
             if (ret == -1 || diff < ret) ret = diff;
         }
 
         if ((ptr = list_head( &rel_timeout_list )) != NULL)
         {
             struct timeout_user *timeout = LIST_ENTRY( ptr, struct timeout_user, entry );
-            int diff = (-timeout->when - monotonic_time + 9999) / 10000;
-            if (diff < 0) diff = 0;
+            timeout_t diff = (-timeout->when - monotonic_time + 9999) / 10000;
+            if (diff > INT_MAX) diff = INT_MAX;
+            else if (diff < 0) diff = 0;
             if (ret == -1 || diff < ret) ret = diff;
         }
     }




More information about the wine-cvs mailing list