Refactor ASN1_TIME_adj_internal()
authortb <tb@openbsd.org>
Thu, 28 Apr 2022 17:31:29 +0000 (17:31 +0000)
committertb <tb@openbsd.org>
Thu, 28 Apr 2022 17:31:29 +0000 (17:31 +0000)
commit5fff88f8442c57a754a9562593b68f5e8cdc3a43
treed68fad41bbd288673799b98d0975311df353869e
parentef8e83db3db18f07230f8ff6ab27b4231898b41c
Refactor ASN1_TIME_adj_internal()

ASN1_TIME_adj_internal() does some strange dances with remembering
allocations in a boolean and using strlen(p) to deduce what happened
inside *_string_from_tm(). It also (mis)translates a NULL p to an
illegal time value error.

This can be streamlined by converting directly from a struct tm into an
ASN1_TIME and setting the errors when they occur instead of trying to
deduce them from a NULL return. This is made a bit uglier than necessary
due to the reuse-or-allocate semantics of the public API.

At the cost of a little code duplication, ASN1_TIME_adj_internal()
becomes very easy and ASN1_TIME_to_generalizedtime() is also simplified
somewhat.

ok inoguchi jsing
lib/libcrypto/asn1/a_time_tm.c