[openssh-commits] [openssh] 01/01: upstream: add some tests for parse_absolute_time(), including cases

git+noreply at mindrot.org git+noreply at mindrot.org
Thu Aug 11 12:01:56 AEST 2022


This is an automated email from the git hooks/post-receive script.

djm pushed a commit to branch master
in repository openssh.

commit b98a42afb69d60891eb0488935990df6ee571c4d
Author: djm at openbsd.org <djm at openbsd.org>
Date:   Thu Aug 11 01:57:50 2022 +0000

    upstream: add some tests for parse_absolute_time(), including cases
    
    where it is forced to the UTC timezone. bz3468 ok dtucker
    
    OpenBSD-Regress-ID: ea07ca31c2f3847a38df028ca632763ae44e8759
---
 regress/unittests/misc/test_convtime.c | 64 +++++++++++++++++++++++++++++++++-
 1 file changed, 63 insertions(+), 1 deletion(-)

diff --git a/regress/unittests/misc/test_convtime.c b/regress/unittests/misc/test_convtime.c
index ef6fd77d..4794dbd9 100644
--- a/regress/unittests/misc/test_convtime.c
+++ b/regress/unittests/misc/test_convtime.c
@@ -1,4 +1,4 @@
-/* 	$OpenBSD: test_convtime.c,v 1.2 2021/12/14 21:25:27 deraadt Exp $ */
+/* 	$OpenBSD: test_convtime.c,v 1.3 2022/08/11 01:57:50 djm Exp $ */
 /*
  * Regress test for misc time conversion functions.
  *
@@ -20,6 +20,7 @@
 
 #include "log.h"
 #include "misc.h"
+#include "ssherr.h"
 
 void test_convtime(void);
 
@@ -27,6 +28,7 @@ void
 test_convtime(void)
 {
 	char buf[1024];
+	uint64_t t;
 
 	TEST_START("misc_convtime");
 	ASSERT_INT_EQ(convtime("0"), 0);
@@ -56,4 +58,64 @@ test_convtime(void)
 	ASSERT_INT_EQ(convtime("3550w5d3h14m8s"), -1);
 #endif
 	TEST_DONE();
+
+	/* XXX timezones/DST make verification of this tricky */
+	/* XXX maybe setenv TZ and tzset() to make it unambiguous? */
+	TEST_START("misc_parse_absolute_time");
+	ASSERT_INT_EQ(parse_absolute_time("20000101", &t), 0);
+	ASSERT_INT_EQ(parse_absolute_time("200001011223", &t), 0);
+	ASSERT_INT_EQ(parse_absolute_time("20000101122345", &t), 0);
+
+	/* forced UTC TZ */
+	ASSERT_INT_EQ(parse_absolute_time("20000101Z", &t), 0);
+	ASSERT_U64_EQ(t, 946684800);
+	ASSERT_INT_EQ(parse_absolute_time("200001011223Z", &t), 0);
+	ASSERT_U64_EQ(t, 946729380);
+	ASSERT_INT_EQ(parse_absolute_time("20000101122345Z", &t), 0);
+	ASSERT_U64_EQ(t, 946729425);
+	ASSERT_INT_EQ(parse_absolute_time("20000101UTC", &t), 0);
+	ASSERT_U64_EQ(t, 946684800);
+	ASSERT_INT_EQ(parse_absolute_time("200001011223UTC", &t), 0);
+	ASSERT_U64_EQ(t, 946729380);
+	ASSERT_INT_EQ(parse_absolute_time("20000101122345UTC", &t), 0);
+	ASSERT_U64_EQ(t, 946729425);
+
+	/* Bad month */
+	ASSERT_INT_EQ(parse_absolute_time("20001301", &t),
+	    SSH_ERR_INVALID_FORMAT);
+	ASSERT_INT_EQ(parse_absolute_time("20000001", &t),
+	    SSH_ERR_INVALID_FORMAT);
+	/* Incomplete */
+	ASSERT_INT_EQ(parse_absolute_time("2", &t),
+	    SSH_ERR_INVALID_FORMAT);
+	ASSERT_INT_EQ(parse_absolute_time("2000", &t),
+	    SSH_ERR_INVALID_FORMAT);
+	ASSERT_INT_EQ(parse_absolute_time("20000", &t),
+	    SSH_ERR_INVALID_FORMAT);
+	ASSERT_INT_EQ(parse_absolute_time("200001", &t),
+	    SSH_ERR_INVALID_FORMAT);
+	ASSERT_INT_EQ(parse_absolute_time("2000010", &t),
+	    SSH_ERR_INVALID_FORMAT);
+	ASSERT_INT_EQ(parse_absolute_time("200001010", &t),
+	    SSH_ERR_INVALID_FORMAT);
+	/* Bad day, hour, minute, second */
+	ASSERT_INT_EQ(parse_absolute_time("20000199", &t),
+	    SSH_ERR_INVALID_FORMAT);
+	ASSERT_INT_EQ(parse_absolute_time("200001019900", &t),
+	    SSH_ERR_INVALID_FORMAT);
+	ASSERT_INT_EQ(parse_absolute_time("200001010099", &t),
+	    SSH_ERR_INVALID_FORMAT);
+	ASSERT_INT_EQ(parse_absolute_time("20000101000099", &t),
+	    SSH_ERR_INVALID_FORMAT);
+	/* Invalid TZ specifier */
+	ASSERT_INT_EQ(parse_absolute_time("20000101ZZ", &t),
+	    SSH_ERR_INVALID_FORMAT);
+	ASSERT_INT_EQ(parse_absolute_time("20000101PDT", &t),
+	    SSH_ERR_INVALID_FORMAT);
+	ASSERT_INT_EQ(parse_absolute_time("20000101U", &t),
+	    SSH_ERR_INVALID_FORMAT);
+	ASSERT_INT_EQ(parse_absolute_time("20000101UTCUTC", &t),
+	    SSH_ERR_INVALID_FORMAT);
+
+	TEST_DONE();
 }

-- 
To stop receiving notification emails like this one, please contact
djm at mindrot.org.


More information about the openssh-commits mailing list