]> granicus.if.org Git - icinga2/commitdiff
Fix parsing of YYYY-MM-DD in LegacyTimePeriod::ParseTimeSpec
authorAdam James <adam.james@transitiv.co.uk>
Tue, 9 Feb 2016 18:04:37 +0000 (18:04 +0000)
committerJean Flach <jean-marcel.flach@netways.de>
Wed, 10 Feb 2016 15:24:36 +0000 (16:24 +0100)
fixes #11132

Signed-off-by: Jean Flach <jean-marcel.flach@netways.de>
lib/icinga/legacytimeperiod.cpp

index b35495e5588fd8cacf21ca90d37f5a7037ac6333..267fb67f2c39b069fcb9dbbb468cfd6bffd9856a 100644 (file)
@@ -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;