From b7744be20806a9cc3697f0806eb452012e7180be Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Mon, 16 Dec 2019 23:28:47 +0100 Subject: song/Filter: try ParseISO8601() first Prepare for allowing ISO8601 time stamps without delimiters, such as 20191216, and prevent them from being interpreted as numeric UNIX time stamps. --- src/song/Filter.cxx | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/song/Filter.cxx b/src/song/Filter.cxx index 9c0583845..e369c8c93 100644 --- a/src/song/Filter.cxx +++ b/src/song/Filter.cxx @@ -113,14 +113,19 @@ ParseTimeStamp(const char *s) { assert(s != nullptr); - char *endptr; - unsigned long long value = strtoull(s, &endptr, 10); - if (*endptr == 0 && endptr > s) - /* it's an integral UNIX time stamp */ - return std::chrono::system_clock::from_time_t((time_t)value); - - /* try ISO 8601 */ - return ParseISO8601(s).first; + try { + /* try ISO 8601 */ + return ParseISO8601(s).first; + } catch (...) { + char *endptr; + unsigned long long value = strtoull(s, &endptr, 10); + if (*endptr == 0 && endptr > s) + /* it's an integral UNIX time stamp */ + return std::chrono::system_clock::from_time_t((time_t)value); + + /* rethrow the ParseISO8601() error */ + throw; + } } static constexpr bool -- cgit v1.2.3