From 31d797eb1b3c5aa07f928b58402529fd35b71bcc Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Tue, 9 Dec 2008 10:56:00 +0000 Subject: [PATCH] Fix #2848: avoid overflow during time calculation --- rts/posix/Itimer.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/rts/posix/Itimer.c b/rts/posix/Itimer.c index a60f8f1..6b4ba3b 100644 --- a/rts/posix/Itimer.c +++ b/rts/posix/Itimer.c @@ -264,7 +264,8 @@ getourtimeofday(void) interval = RtsFlags.MiscFlags.tickInterval; if (interval == 0) { interval = 50; } gettimeofday(&tv, (struct timezone *) NULL); - // cast to lnat because nat may be 64 bit when int is only 32 bit - return ((lnat)tv.tv_sec * 1000 / interval + - (lnat)tv.tv_usec / (interval * 1000)); + + // Avoid overflow when we multiply seconds by 1000. See #2848 + return (lnat)((StgWord64)tv.tv_sec * 1000 / interval + + (StgWord64)tv.tv_usec / (interval * 1000)); } -- 1.7.10.4