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:
Joseph Sutton
2022-03-01 11:55:38 +13:00
committed by Jeffrey Altman
parent 0861754a84
commit 698bbb5647

View File

@@ -51,13 +51,10 @@ rk_time_add(time_t t, time_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 */
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)
/* Avoid computing -t when t == 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 */
return INT32_MIN;
else
@@ -65,13 +62,10 @@ rk_time_add(time_t t, time_t delta)
#elif SIZEOF_TIME_T == 8
if (t >= 0 && delta > 0 && INT64_MAX - t < delta)
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)
/* Avoid computing -t when t == 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;
else
return t + delta;