Fix time offset calculation.
authorTodd Short <tshort@akamai.com>
Thu, 16 Feb 2017 21:08:02 +0000 (16:08 -0500)
committerRichard Levitte <levitte@openssl.org>
Tue, 2 May 2017 08:43:09 +0000 (10:43 +0200)
ASN1_GENERALIZEDTIME and ASN1_UTCTIME may be specified using offsets,
even though that's not supported within certificates.

To convert the offset time back to GMT, the offsets are supposed to be
subtracted, not added. e.g. 1759-0500 == 2359+0100 == 2259Z.

Reviewed-by: Rich Salz <rsalz@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/3335)
(cherry picked from commit ae32742e3db45a19aead2c42e30072882492be1d)

crypto/asn1/a_gentm.c
crypto/asn1/a_utctm.c

index fa76dcac91f34bc874fc3016bdb03d9b558b0361..85118137859f91417e6a264715080020cb6820dd 100644 (file)
@@ -202,7 +202,7 @@ int asn1_generalizedtime_to_tm(struct tm *tm, const ASN1_GENERALIZEDTIME *d)
     if (a[o] == 'Z')
         o++;
     else if ((a[o] == '+') || (a[o] == '-')) {
-        int offsign = a[o] == '-' ? -1 : 1, offset = 0;
+        int offsign = a[o] == '-' ? 1 : -1, offset = 0;
         o++;
         if (o + 4 > l)
             goto err;
index 724a10be4ed6abb3c43f05d10fcdfcc87d5046d5..0344482cc247f21c68b12317cbbbc5ccbe58b47f 100644 (file)
@@ -172,7 +172,7 @@ int asn1_utctime_to_tm(struct tm *tm, const ASN1_UTCTIME *d)
     if (a[o] == 'Z')
         o++;
     else if ((a[o] == '+') || (a[o] == '-')) {
-        int offsign = a[o] == '-' ? -1 : 1, offset = 0;
+        int offsign = a[o] == '-' ? 1 : -1, offset = 0;
         o++;
         if (o + 4 > l)
             goto err;