mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-11 05:33:47 +01:00
Merge remote-tracking branch 'teor/bug19483-fix-v2'
This commit is contained in:
commit
a31f55b16b
@ -1451,11 +1451,14 @@ tv_udiff(const struct timeval *start, const struct timeval *end)
|
||||
* between 0 and TV_USEC_PER_SEC. */
|
||||
udiff = secdiff*1000000 + ((int64_t)end->tv_usec - (int64_t)start->tv_usec);
|
||||
|
||||
/* Some compilers are smart enough to work out this is a no-op on L64 */
|
||||
#if SIZEOF_LONG < 8
|
||||
if (udiff > (int64_t)LONG_MAX || udiff < (int64_t)LONG_MIN) {
|
||||
return LONG_MAX;
|
||||
} else {
|
||||
return (long)udiff;
|
||||
}
|
||||
#endif
|
||||
|
||||
return (long)udiff;
|
||||
}
|
||||
|
||||
/** Return the number of milliseconds elapsed between *start and *end.
|
||||
@ -1507,11 +1510,14 @@ tv_mdiff(const struct timeval *start, const struct timeval *end)
|
||||
((int64_t)end->tv_usec - (int64_t)start->tv_usec + 500 + 1000000) / 1000
|
||||
- 1000;
|
||||
|
||||
/* Some compilers are smart enough to work out this is a no-op on L64 */
|
||||
#if SIZEOF_LONG < 8
|
||||
if (mdiff > (int64_t)LONG_MAX || mdiff < (int64_t)LONG_MIN) {
|
||||
return LONG_MAX;
|
||||
} else {
|
||||
return (long)mdiff;
|
||||
}
|
||||
#endif
|
||||
|
||||
return (long)mdiff;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -303,6 +303,23 @@ test_util_time(void *arg)
|
||||
tt_int_op(1005000L,OP_EQ, tv_udiff(&end, &start));
|
||||
tt_int_op(1005L,OP_EQ, tv_mdiff(&end, &start));
|
||||
|
||||
/* Negative tv_sec values, these will break on platforms where tv_sec is
|
||||
* unsigned */
|
||||
|
||||
end.tv_sec = -10;
|
||||
|
||||
tt_int_op(-15005000L,OP_EQ, tv_udiff(&start, &end));
|
||||
tt_int_op(-15005L,OP_EQ, tv_mdiff(&start, &end));
|
||||
tt_int_op(15005000L,OP_EQ, tv_udiff(&end, &start));
|
||||
tt_int_op(15005L,OP_EQ, tv_mdiff(&end, &start));
|
||||
|
||||
start.tv_sec = -100;
|
||||
|
||||
tt_int_op(89995000L,OP_EQ, tv_udiff(&start, &end));
|
||||
tt_int_op(89995L,OP_EQ, tv_mdiff(&start, &end));
|
||||
tt_int_op(-89995000L,OP_EQ, tv_udiff(&end, &start));
|
||||
tt_int_op(-89995L,OP_EQ, tv_mdiff(&end, &start));
|
||||
|
||||
/* Test that tv_usec values round away from zero when converted to msec */
|
||||
start.tv_sec = 0;
|
||||
start.tv_usec = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user