avoid calling format_iso_time() with TIME_MAX
commit40cd992abbd4d06023cf14c39c337e4aa62416ec
authorRoger Dingledine <arma@torproject.org>
Sun, 7 Jan 2018 07:15:18 +0000 (7 02:15 -0500)
committerRoger Dingledine <arma@torproject.org>
Sun, 7 Jan 2018 07:15:18 +0000 (7 02:15 -0500)
treed5b8a0333835a83f813f41f462f3cde3e3559dda
parent44aa1adf350ed790365eb3c8f97f35da6a4247ab
avoid calling format_iso_time() with TIME_MAX

If we tried to move a descriptor from routerlist->old_routers
back into the current routerlist, we were preparing a buffer with
format_iso_time() on ri->cert_expiration_time, and doing it preemptively
since router_add_to_routerlist() might free ri so we wouldn't be able
to get at it later in the function.

But if the descriptor we're moving doesn't have any ed signature, then
its cert will be marked to expire at TIME_MAX, and handing TIME_MAX
to format_iso_time() generates this log warning:

correct_tm(): Bug: gmtime(9223372036854775807) failed with error Value too large for defined data type: Rounding down to 2037

The fix is to preemptively remember the expiry time, but only prepare
the buffer if we know we're going to need it.

Bugfix on commit a1b0a0b9, which came about as part of a fix for bug
20020, and which is not yet in any released version of Tor (hence no
changes file).
src/or/routerlist.c