mirror of
https://github.com/moparisthebest/curl
synced 2025-01-04 18:38:03 -05:00
curlx_tvdiff: handle 32bit time_t overflows
On 32bit systems, make sure we don't overflow and return funky values for very large time differences. Reported-by: Anders Bakken Closes #646
This commit is contained in:
parent
d202fbcc00
commit
d6b37d83f9
@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@ -113,10 +113,18 @@ struct timeval curlx_tvnow(void)
|
|||||||
* Make sure that the first argument is the more recent time, as otherwise
|
* Make sure that the first argument is the more recent time, as otherwise
|
||||||
* we'll get a weird negative time-diff back...
|
* we'll get a weird negative time-diff back...
|
||||||
*
|
*
|
||||||
* Returns: the time difference in number of milliseconds.
|
* Returns: the time difference in number of milliseconds. For large diffs it
|
||||||
|
* returns 0x7fffffff on 32bit time_t systems.
|
||||||
*/
|
*/
|
||||||
long curlx_tvdiff(struct timeval newer, struct timeval older)
|
long curlx_tvdiff(struct timeval newer, struct timeval older)
|
||||||
{
|
{
|
||||||
|
#if SIZEOF_TIME_T < 8
|
||||||
|
/* for 32bit time_t systems, add a precaution to avoid overflow for really
|
||||||
|
big time differences */
|
||||||
|
time_t diff = newer.tv_sec-older.tv_sec;
|
||||||
|
if(diff >= (0x7fffffff/1000))
|
||||||
|
return 0x7fffffff;
|
||||||
|
#endif
|
||||||
return (newer.tv_sec-older.tv_sec)*1000+
|
return (newer.tv_sec-older.tv_sec)*1000+
|
||||||
(long)(newer.tv_usec-older.tv_usec)/1000;
|
(long)(newer.tv_usec-older.tv_usec)/1000;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user