From 1d05ea78e94897160f978f6103c5f4acf7fb43d3 Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Sun, 31 Aug 2008 00:14:30 +0000 Subject: [PATCH] Add validation for DateTime constructor parameters --- source/time/datetime.cpp | 28 +++++++++++++++++++++++++--- source/time/datetime.h | 1 + 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/source/time/datetime.cpp b/source/time/datetime.cpp index 8886139..4c10975 100644 --- a/source/time/datetime.cpp +++ b/source/time/datetime.cpp @@ -63,7 +63,9 @@ DateTime::DateTime(int32_t y, uint8_t m, uint8_t d): minute(0), second(0), usec(0) -{ } +{ + validate(); +} DateTime::DateTime(int32_t y, uint8_t m, uint8_t d, uint8_t h, uint8_t n, uint8_t s): year(y), @@ -73,7 +75,9 @@ DateTime::DateTime(int32_t y, uint8_t m, uint8_t d, uint8_t h, uint8_t n, uint8_ minute(n), second(s), usec(0) -{ } +{ + validate(); +} DateTime::DateTime(int32_t y, uint8_t m, uint8_t d, uint8_t h, uint8_t n, uint8_t s, uint32_t u): year(y), @@ -83,7 +87,9 @@ DateTime::DateTime(int32_t y, uint8_t m, uint8_t d, uint8_t h, uint8_t n, uint8_ minute(n), second(s), usec(u) -{ } +{ + validate(); +} void DateTime::add_days(int32_t days) { @@ -280,5 +286,21 @@ void DateTime::normalize() } } +void DateTime::validate() const +{ + if(usec>=1000000) + throw InvalidParameterValue("Microseconds out of range"); + if(second>=60) + throw InvalidParameterValue("Seconds out of range"); + if(minute>=60) + throw InvalidParameterValue("Minutes out of range"); + if(hour>=24) + throw InvalidParameterValue("Hours out of range"); + if(month<1 || month>12) + throw InvalidParameterValue("Month out of range"); + if(mday<1 || mday>month_days(year, month)) + throw InvalidParameterValue("Day of month out of range"); +} + } // namespace Time } // namespace Msp diff --git a/source/time/datetime.h b/source/time/datetime.h index 4f439e6..807b16c 100644 --- a/source/time/datetime.h +++ b/source/time/datetime.h @@ -62,6 +62,7 @@ private: void add_raw(int64_t); void normalize(); + void validate() const; }; } // namespace Time -- 2.43.0