From 998abbbae78273bc3ee10e1b8fe34d41057a0ff3 Mon Sep 17 00:00:00 2001 From: Adam James Date: Tue, 9 Feb 2016 18:04:37 +0000 Subject: [PATCH] Fix parsing of YYYY-MM-DD in LegacyTimePeriod::ParseTimeSpec fixes #11132 Signed-off-by: Jean Flach --- lib/icinga/legacytimeperiod.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/icinga/legacytimeperiod.cpp b/lib/icinga/legacytimeperiod.cpp index b35495e55..267fb67f2 100644 --- a/lib/icinga/legacytimeperiod.cpp +++ b/lib/icinga/legacytimeperiod.cpp @@ -144,10 +144,15 @@ void LegacyTimePeriod::ParseTimeSpec(const String& timespec, tm *begin, tm *end, int month = Convert::ToLong(timespec.SubStr(5, 2)); int day = Convert::ToLong(timespec.SubStr(8, 2)); + if (month < 1 || month > 12) + BOOST_THROW_EXCEPTION(std::invalid_argument("Invalid month in time specification: " + timespec)); + if (day < 1 || day > 31) + BOOST_THROW_EXCEPTION(std::invalid_argument("Invalid day in time specification: " + timespec)); + if (begin) { begin->tm_year = year - 1900; - begin->tm_mon = month; - begin->tm_mday = day + 1; + begin->tm_mon = month - 1; + begin->tm_mday = day; begin->tm_hour = 0; begin->tm_min = 0; begin->tm_sec = 0; @@ -155,8 +160,8 @@ void LegacyTimePeriod::ParseTimeSpec(const String& timespec, tm *begin, tm *end, if (end) { end->tm_year = year - 1900; - end->tm_mon = month; - end->tm_mday = day + 1; + end->tm_mon = month - 1; + end->tm_mday = day; end->tm_hour = 24; end->tm_min = 0; end->tm_sec = 0;