X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;ds=sidebyside;f=test%2Fasn1_time_test.c;h=a619b373024bdaa79887142aaf7e8b6178ce99c4;hb=a397aca43598ef20c84e69f6d6e5d95652aa0325;hp=c185ece98f7311fba80ecfb1ef1a2323b1b6e679;hpb=fdf9450f4266971035ca5f87c46c3826b49b5757;p=oweals%2Fopenssl.git diff --git a/test/asn1_time_test.c b/test/asn1_time_test.c index c185ece98f..a619b37302 100644 --- a/test/asn1_time_test.c +++ b/test/asn1_time_test.c @@ -1,7 +1,7 @@ /* - * Copyright 1999-2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL license (the "License"). You may not use + * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html @@ -16,7 +16,7 @@ #include #include #include "testutil.h" -#include +#include "internal/nelem.h" struct testdata { char *data; /* TIME string value */ @@ -24,8 +24,8 @@ struct testdata { int expected_type; /* expected type after set/set_string_gmt */ int check_result; /* check result */ time_t t; /* expected time_t*/ - int cmp_result; /* compariston to baseline result */ - int convert_result; /* convertion result */ + int cmp_result; /* comparison to baseline result */ + int convert_result; /* conversion result */ }; static struct testdata tbl_testdata_pos[] = { @@ -79,22 +79,23 @@ static struct testdata tbl_testdata_pos[] = { /* ASSUMES SIGNED TIME_T */ static struct testdata tbl_testdata_neg[] = { - { "19011213204552Z", V_ASN1_GENERALIZEDTIME, V_ASN1_GENERALIZEDTIME, 1, -2147483648, -1, 0, }, + { "19011213204552Z", V_ASN1_GENERALIZEDTIME, V_ASN1_GENERALIZEDTIME, 1, INT_MIN, -1, 0, }, { "691006121456Z", V_ASN1_UTCTIME, V_ASN1_UTCTIME, 1, -7472704, -1, 1, }, { "19691006121456Z", V_ASN1_GENERALIZEDTIME, V_ASN1_UTCTIME, 1, -7472704, -1, 1, }, }; +/* explicit casts to time_t short warnings on systems with 32-bit time_t */ static struct testdata tbl_testdata_pos_64bit[] = { - { "20380119031408Z", V_ASN1_GENERALIZEDTIME, V_ASN1_UTCTIME, 1, 0x80000000, 1, 1, }, - { "20380119031409Z", V_ASN1_GENERALIZEDTIME, V_ASN1_UTCTIME, 1, 0x80000001, 1, 1, }, - { "380119031408Z", V_ASN1_UTCTIME, V_ASN1_UTCTIME, 1, 0x80000000, 1, 1, }, - { "20500101120000Z", V_ASN1_GENERALIZEDTIME, V_ASN1_GENERALIZEDTIME, 1, 2524651200, 1, 0, }, + { "20380119031408Z", V_ASN1_GENERALIZEDTIME, V_ASN1_UTCTIME, 1, (time_t)0x80000000, 1, 1, }, + { "20380119031409Z", V_ASN1_GENERALIZEDTIME, V_ASN1_UTCTIME, 1, (time_t)0x80000001, 1, 1, }, + { "380119031408Z", V_ASN1_UTCTIME, V_ASN1_UTCTIME, 1, (time_t)0x80000000, 1, 1, }, + { "20500101120000Z", V_ASN1_GENERALIZEDTIME, V_ASN1_GENERALIZEDTIME, 1, (time_t)0x967b1ec0, 1, 0, }, }; /* ASSUMES SIGNED TIME_T */ static struct testdata tbl_testdata_neg_64bit[] = { - { "19011213204551Z", V_ASN1_GENERALIZEDTIME, V_ASN1_GENERALIZEDTIME, 1, -2147483649, -1, 0, }, - { "19000101120000Z", V_ASN1_GENERALIZEDTIME, V_ASN1_GENERALIZEDTIME, 1, -2208945600, -1, 0, }, + { "19011213204551Z", V_ASN1_GENERALIZEDTIME, V_ASN1_GENERALIZEDTIME, 1, (time_t)-2147483649LL, -1, 0, }, + { "19000101120000Z", V_ASN1_GENERALIZEDTIME, V_ASN1_GENERALIZEDTIME, 1, (time_t)-2208945600LL, -1, 0, }, }; /* A baseline time to compare to */ @@ -274,6 +275,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) { /* @@ -300,10 +346,13 @@ int setup_tests(void) if (sizeof(time_t) > sizeof(uint32_t)) { TEST_info("Adding 64-bit time_t tests"); ADD_ALL_TESTS(test_table_pos_64bit, OSSL_NELEM(tbl_testdata_pos_64bit)); +#ifndef __hpux if (!(t > 0) && ptm != NULL) { TEST_info("Adding negative-sign 64-bit time_t tests"); ADD_ALL_TESTS(test_table_neg_64bit, OSSL_NELEM(tbl_testdata_neg_64bit)); } +#endif } + ADD_ALL_TESTS(test_table_compare, OSSL_NELEM(tbl_compare_testdata)); return 1; }