Robbin Kawabata <Robbin.Kawabata@sun.com> writes:
if (t >= cuthitime) break; + /* check if newt will overrun maximum time_t value */ + if (t > LONG_MAX - (SECSPERHOUR * 12)) + break; newt = t + SECSPERHOUR * 12; if (newt >= cuthitime) break; - if (newt <= t) - break;
Thanks for the diagnosis and patch. I see one problem with that code, though: it assumes that time_t == long, which is not a portable assumption. Also, the code is overly complicated. I suggest using something like this instead: if (t >= cuthitime || t >= cuthitime - SECSPERHOUR * 12) break; newt = t + SECSPERHOUR * 12; The seemingly redundant "t >= cuthitime" test prevents arithmetic overflow in the subtraction (admittedly highly unlikely, but I couldn't prove to my own satisfaction that it could never occur). If we are really worried about cycles, the seemingly-redundant test could be hoisted out of the loop, as it applies only to the first iteration of the loop.