From 657e5007aa5636ceaad11fe6f807005aa03894f5 Mon Sep 17 00:00:00 2001 From: Mihai Budiu Date: Fri, 9 Feb 2024 10:58:51 -0800 Subject: [PATCH] [CALCITE-6248] Illegal dates are accepted by casts Signed-off-by: Mihai Budiu --- .../java/org/apache/calcite/avatica/util/DateTimeUtils.java | 1 + .../org/apache/calcite/avatica/util/DateTimeUtilsTest.java | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/core/src/main/java/org/apache/calcite/avatica/util/DateTimeUtils.java b/core/src/main/java/org/apache/calcite/avatica/util/DateTimeUtils.java index bb9f233a72..150415ed18 100644 --- a/core/src/main/java/org/apache/calcite/avatica/util/DateTimeUtils.java +++ b/core/src/main/java/org/apache/calcite/avatica/util/DateTimeUtils.java @@ -653,6 +653,7 @@ private static void fraction(StringBuilder buf, int scale, long ms) { } public static int dateStringToUnixDate(String s) { + validateDate(s, s); int hyphen1 = s.indexOf('-'); int y; int m; diff --git a/core/src/test/java/org/apache/calcite/avatica/util/DateTimeUtilsTest.java b/core/src/test/java/org/apache/calcite/avatica/util/DateTimeUtilsTest.java index 2cae4a7435..1676d18717 100644 --- a/core/src/test/java/org/apache/calcite/avatica/util/DateTimeUtilsTest.java +++ b/core/src/test/java/org/apache/calcite/avatica/util/DateTimeUtilsTest.java @@ -1681,6 +1681,12 @@ private static void assertThrows(Runnable runnable, * Test exception is raised if date in inappropriate meaning. */ @Test public void testBrokenDate() { + // Test case for https://issues.apache.org/jira/browse/CALCITE-6248 + // [CALCITE-6248] Illegal dates are accepted by casts + assertThrows(() -> DateTimeUtils.dateStringToUnixDate("2023-02-29"), + IllegalArgumentException.class, + is("Value of DAY field is out of range in '2023-02-29'")); + // 2023 is not a leap year assertThrows(() -> DateTimeUtils.timestampStringToUnixDate("2023-02-29 12:00:00.123"),