From b0e249e56468a3daee9dd132f5bf3f0d555b5891 Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Sun, 27 Sep 2015 16:28:25 -0400 Subject: [PATCH] ISO8601d: Epoch strings are parsed without the same validation as other dates --- src/ISO8601.cpp | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/ISO8601.cpp b/src/ISO8601.cpp index 84a59b106..efcd3dde8 100644 --- a/src/ISO8601.cpp +++ b/src/ISO8601.cpp @@ -234,14 +234,13 @@ bool ISO8601d::parse ( auto i = start; Nibbler n (input.substr (i)); if (parse_formatted (n, format) || - parse_date_time (n) || // Strictest first. + parse_date_time (n) || // Strictest first. parse_date_time_ext (n) || parse_date_ext (n) || parse_time_utc_ext (n) || parse_time_off_ext (n) || - parse_time_ext (n) || - parse_named (n) || - parse_epoch (n)) // Time last, as it is the most permissive. + parse_time_ext (n) || // Time last, as it is the most permissive. + parse_named (n)) { // Check the values and determine time_t. if (validate ()) @@ -254,6 +253,13 @@ bool ISO8601d::parse ( } } + // ::parse_epoch doesn't require ::validate and ::resolve. + else if (parse_epoch (n)) + { + start = n.cursor (); + return true; + } + return false; } @@ -953,9 +959,9 @@ void ISO8601d::resolve () seconds %= 86400; } - t.tm_hour = seconds / 3600; - t.tm_min = (seconds % 3600) / 60; - t.tm_sec = seconds % 60; + t.tm_hour = seconds / 3600; + t.tm_min = (seconds % 3600) / 60; + t.tm_sec = seconds % 60; _date = utc ? timegm (&t) : mktime (&t); }