calendarspec: reject strings that only contain a timezone
authorDouglas Christman <DouglasChristman@gmail.com>
Thu, 24 Nov 2016 17:21:37 +0000 (12:21 -0500)
committerDouglas Christman <DouglasChristman@gmail.com>
Thu, 24 Nov 2016 23:22:08 +0000 (18:22 -0500)
This makes " UTC" an illegal date specification.

src/basic/calendarspec.c
src/test/test-calendarspec.c

index db11e55..316db5c 100644 (file)
@@ -779,9 +779,6 @@ int calendar_spec_from_string(const char *p, CalendarSpec **spec) {
         assert(p);
         assert(spec);
 
-        if (isempty(p))
-                return -EINVAL;
-
         c = new0(CalendarSpec, 1);
         if (!c)
                 return -ENOMEM;
@@ -820,6 +817,11 @@ int calendar_spec_from_string(const char *p, CalendarSpec **spec) {
                 }
         }
 
+        if (isempty(p)) {
+                r = -EINVAL;
+                goto fail;
+        }
+
         if (strcaseeq(p, "minutely")) {
                 r = const_chain(0, &c->microsecond);
                 if (r < 0)
index 7357c52..c539d16 100644 (file)
@@ -202,6 +202,7 @@ int main(int argc, char* argv[]) {
         test_next("Mon 2017-05~07/1 UTC", "", 12345, 1496016000000000);
 
         assert_se(calendar_spec_from_string("test", &c) < 0);
+        assert_se(calendar_spec_from_string(" utc", &c) < 0);
         assert_se(calendar_spec_from_string("    ", &c) < 0);
         assert_se(calendar_spec_from_string("", &c) < 0);
         assert_se(calendar_spec_from_string("7", &c) < 0);