diff --git a/src/common/time/TimeUtils.h b/src/common/time/TimeUtils.h index 94570877ad3..3650cfdd35d 100644 --- a/src/common/time/TimeUtils.h +++ b/src/common/time/TimeUtils.h @@ -50,6 +50,10 @@ class TimeUtils { if ((p[date.month] - p[date.month - 1]) < date.day) { return Status::Error("`%s' is not a valid date.", date.toString().c_str()); } + if (UNLIKELY(0 == date.day)) { + return Status::Error("`%s' is not a valid date since invalid day.", + date.toString().c_str()); + } return Status::OK(); } diff --git a/src/common/time/parser/test/DateTimeParserTest.cpp b/src/common/time/parser/test/DateTimeParserTest.cpp index 4c65f009c42..fdcf1ec551b 100644 --- a/src/common/time/parser/test/DateTimeParserTest.cpp +++ b/src/common/time/parser/test/DateTimeParserTest.cpp @@ -178,6 +178,21 @@ TEST(DatetimeReader, DateTimeFailed) { auto result = parser.readDatetime("1999-01-32T22:22:3.2333"); EXPECT_FALSE(result.ok()) << result.value(); } + { + auto parser = time::DatetimeReader(); + auto result = parser.readDatetime("1999-00-03T12:34:56.2333"); + EXPECT_FALSE(result.ok()) << result.value(); + } + { + auto parser = time::DatetimeReader(); + auto result = parser.readDatetime("1999-01-00T22:00:03.2333"); + EXPECT_FALSE(result.ok()) << result.value(); + } + { + auto parser = time::DatetimeReader(); + auto result = parser.readDatetime("1999-00-00T22:22:05.2333"); + EXPECT_FALSE(result.ok()) << result.value(); + } } TEST(DatetimeReader, Date) { @@ -278,6 +293,21 @@ TEST(DatetimeReader, DateFailed) { auto result = parser.readDate("1999-01-32"); EXPECT_FALSE(result.ok()) << result.value(); } + { + auto parser = time::DatetimeReader(); + auto result = parser.readDate("1999-00-03"); + EXPECT_FALSE(result.ok()) << result.value(); + } + { + auto parser = time::DatetimeReader(); + auto result = parser.readDate("1999-01-00"); + EXPECT_FALSE(result.ok()) << result.value(); + } + { + auto parser = time::DatetimeReader(); + auto result = parser.readDate("1999-00-00"); + EXPECT_FALSE(result.ok()) << result.value(); + } } TEST(DatetimeReader, Time) {