test/asn1_time_test.c: Better check of signed time_t
authorRichard Levitte <levitte@openssl.org>
Thu, 17 Aug 2017 16:03:22 +0000 (18:03 +0200)
committerRichard Levitte <levitte@openssl.org>
Fri, 18 Aug 2017 07:52:01 +0000 (09:52 +0200)
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/4182)

test/asn1_time_test.c

index 897436c3f4c685f3f4a730fa1c725febe66fcbcf..c185ece98f7311fba80ecfb1ef1a2323b1b6e679 100644 (file)
@@ -276,18 +276,31 @@ static int test_table_neg_64bit(int idx)
 
 int setup_tests(void)
 {
+    /*
+     * On platforms where |time_t| is an unsigned integer, t will be a
+     * positive number.
+     *
+     * We check if we're on a platform with a signed |time_t| with '!(t > 0)'
+     * because some compilers are picky if you do 't < 0', or even 't <= 0'
+     * if |t| is unsigned.
+     */
     time_t t = -1;
+    /*
+     * On some platforms, |time_t| is signed, but a negative value is an
+     * error, and using it with gmtime() or localtime() generates a NULL.
+     * If that is the case, we can't perform tests on negative values.
+     */
     struct tm *ptm = localtime(&t);
 
     ADD_ALL_TESTS(test_table_pos, OSSL_NELEM(tbl_testdata_pos));
-    if (ptm != NULL) {
+    if (!(t > 0) && ptm != NULL) {
         TEST_info("Adding negative-sign time_t tests");
         ADD_ALL_TESTS(test_table_neg, OSSL_NELEM(tbl_testdata_neg));
     }
     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));
-        if (ptm != NULL) {
+        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));
         }