roken: Fix time_t overflow checking
INTxx_MIN plus a positive integer of the same type will always be negative, and so the result will always compare less than a positive integer. Fix this check so that we produce the correct result when adding two negative time_t values. Signed-off-by: Joseph Sutton <josephsutton@catalyst.net.nz>
This commit is contained in:

committed by
Jeffrey Altman

parent
0861754a84
commit
698bbb5647
@@ -51,13 +51,10 @@ rk_time_add(time_t t, time_t delta)
|
|||||||
if (t >= 0 && delta > 0 && INT32_MAX - t < delta)
|
if (t >= 0 && delta > 0 && INT32_MAX - t < delta)
|
||||||
/* Time left to hit INT32_MAX is less than what we want to add */
|
/* Time left to hit INT32_MAX is less than what we want to add */
|
||||||
return INT32_MAX;
|
return INT32_MAX;
|
||||||
else if (t < 0 && delta == INT32_MIN)
|
|
||||||
/* Avoid computing -delta when t == INT32_MIN! */
|
|
||||||
return INT32_MIN;
|
|
||||||
else if (t == INT32_MIN && delta < 0)
|
else if (t == INT32_MIN && delta < 0)
|
||||||
/* Avoid computing -t when t == INT32_MIN! */
|
/* Avoid computing -t when t == INT32_MIN! */
|
||||||
return INT32_MIN;
|
return INT32_MIN;
|
||||||
else if (t < 0 && delta < 0 && INT32_MIN + (-t) < (-delta))
|
else if (t < 0 && delta < 0 && INT32_MIN + (-t) > delta)
|
||||||
/* Time left to hit INT32_MIN is less than what we want to subtract */
|
/* Time left to hit INT32_MIN is less than what we want to subtract */
|
||||||
return INT32_MIN;
|
return INT32_MIN;
|
||||||
else
|
else
|
||||||
@@ -65,13 +62,10 @@ rk_time_add(time_t t, time_t delta)
|
|||||||
#elif SIZEOF_TIME_T == 8
|
#elif SIZEOF_TIME_T == 8
|
||||||
if (t >= 0 && delta > 0 && INT64_MAX - t < delta)
|
if (t >= 0 && delta > 0 && INT64_MAX - t < delta)
|
||||||
return INT64_MAX;
|
return INT64_MAX;
|
||||||
else if (t < 0 && delta == INT64_MIN)
|
|
||||||
/* Avoid computing -delta when t == INT64_MIN! */
|
|
||||||
return INT64_MIN;
|
|
||||||
else if (t == INT64_MIN && delta < 0)
|
else if (t == INT64_MIN && delta < 0)
|
||||||
/* Avoid computing -t when t == INT64_MIN! */
|
/* Avoid computing -t when t == INT64_MIN! */
|
||||||
return INT64_MIN;
|
return INT64_MIN;
|
||||||
else if (t < 0 && delta < 0 && INT64_MIN + (-t) < (-delta))
|
else if (t < 0 && delta < 0 && INT64_MIN + (-t) > delta)
|
||||||
return INT64_MIN;
|
return INT64_MIN;
|
||||||
else
|
else
|
||||||
return t + delta;
|
return t + delta;
|
||||||
|
Reference in New Issue
Block a user