diff options
author | Todd Short <tshort@akamai.com> | 2017-08-25 16:34:56 -0400 |
---|---|---|
committer | Rich Salz <rsalz@openssl.org> | 2017-08-30 11:24:02 -0400 |
commit | e44d37618018eb5dc8ba2d776b215abdaca6090a (patch) | |
tree | 53da2f3aabe6b93365bb60c2d6e00fc70c5c966f | |
parent | 54cf3b981afcbbd3754c8ba1114ab6a658d86c08 (diff) |
Fix return value of ASN1_TIME_compare
Reviewed-by: Andy Polyakov <appro@openssl.org>
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/4264)
-rw-r--r-- | crypto/asn1/a_time.c | 2 | ||||
-rw-r--r-- | test/asn1_time_test.c | 46 |
2 files changed, 47 insertions, 1 deletions
diff --git a/crypto/asn1/a_time.c b/crypto/asn1/a_time.c index cb19e8024a..1babb96360 100644 --- a/crypto/asn1/a_time.c +++ b/crypto/asn1/a_time.c @@ -543,7 +543,7 @@ int ASN1_TIME_compare(const ASN1_TIME *a, const ASN1_TIME *b) { int day, sec; - if (!ASN1_TIME_diff(&day, &sec, a, b)) + if (!ASN1_TIME_diff(&day, &sec, b, a)) return -2; if (day > 0 || sec > 0) return 1; diff --git a/test/asn1_time_test.c b/test/asn1_time_test.c index 96394a1bf8..874260ec84 100644 --- a/test/asn1_time_test.c +++ b/test/asn1_time_test.c @@ -274,6 +274,51 @@ static int test_table_neg_64bit(int idx) return test_table(tbl_testdata_neg_64bit, idx); } +struct compare_testdata { + ASN1_TIME t1; + ASN1_TIME t2; + int result; +}; + +static unsigned char TODAY_GEN_STR[] = "20170825000000Z"; +static unsigned char TOMORROW_GEN_STR[] = "20170826000000Z"; +static unsigned char TODAY_UTC_STR[] = "170825000000Z"; +static unsigned char TOMORROW_UTC_STR[] = "170826000000Z"; + +#define TODAY_GEN { sizeof(TODAY_GEN_STR)-1, V_ASN1_GENERALIZEDTIME, TODAY_GEN_STR, 0 } +#define TOMORROW_GEN { sizeof(TOMORROW_GEN_STR)-1, V_ASN1_GENERALIZEDTIME, TOMORROW_GEN_STR, 0 } +#define TODAY_UTC { sizeof(TODAY_UTC_STR)-1, V_ASN1_UTCTIME, TODAY_UTC_STR, 0 } +#define TOMORROW_UTC { sizeof(TOMORROW_UTC_STR)-1, V_ASN1_UTCTIME, TOMORROW_UTC_STR, 0 } + +static struct compare_testdata tbl_compare_testdata[] = { + { TODAY_GEN, TODAY_GEN, 0 }, + { TODAY_GEN, TODAY_UTC, 0 }, + { TODAY_GEN, TOMORROW_GEN, -1 }, + { TODAY_GEN, TOMORROW_UTC, -1 }, + + { TODAY_UTC, TODAY_GEN, 0 }, + { TODAY_UTC, TODAY_UTC, 0 }, + { TODAY_UTC, TOMORROW_GEN, -1 }, + { TODAY_UTC, TOMORROW_UTC, -1 }, + + { TOMORROW_GEN, TODAY_GEN, 1 }, + { TOMORROW_GEN, TODAY_UTC, 1 }, + { TOMORROW_GEN, TOMORROW_GEN, 0 }, + { TOMORROW_GEN, TOMORROW_UTC, 0 }, + + { TOMORROW_UTC, TODAY_GEN, 1 }, + { TOMORROW_UTC, TODAY_UTC, 1 }, + { TOMORROW_UTC, TOMORROW_GEN, 0 }, + { TOMORROW_UTC, TOMORROW_UTC, 0 } +}; + +static int test_table_compare(int idx) +{ + struct compare_testdata *td = &tbl_compare_testdata[idx]; + + return TEST_int_eq(ASN1_TIME_compare(&td->t1, &td->t2), td->result); +} + int setup_tests(void) { /* @@ -305,5 +350,6 @@ int setup_tests(void) ADD_ALL_TESTS(test_table_neg_64bit, OSSL_NELEM(tbl_testdata_neg_64bit)); } } + ADD_ALL_TESTS(test_table_compare, OSSL_NELEM(tbl_compare_testdata)); return 1; } |