diff --git a/mysql-test/main/func_time.result b/mysql-test/main/func_time.result index eaf30f5f925..3982342b4c5 100644 --- a/mysql-test/main/func_time.result +++ b/mysql-test/main/func_time.result @@ -6425,5 +6425,16 @@ Warning 1292 Truncated incorrect time value: '8390000' Warning 1292 Truncated incorrect time value: '8390000' SET @@timestamp= DEFAULT; # +# MDEV-31302 Assertion `mon > 0 && mon < 13' failed in my_time_t sec_since_epoch(int, int, int, int, int, int) +# +CREATE TABLE t1 (a DATE); +SET @@time_zone='+1:00'; +INSERT INTO t1 VALUES ('2024-00-01'); +SELECT UNIX_TIMESTAMP(MAX(a)) AS a FROM t1; +a +NULL +SET @@time_zone=DEFAULT; +DROP TABLE t1; +# # End of 10.5 tests # diff --git a/mysql-test/main/func_time.test b/mysql-test/main/func_time.test index 51b2722d7a0..25a7e31b54d 100644 --- a/mysql-test/main/func_time.test +++ b/mysql-test/main/func_time.test @@ -3262,6 +3262,17 @@ SELECT SET @@timestamp= DEFAULT; +--echo # +--echo # MDEV-31302 Assertion `mon > 0 && mon < 13' failed in my_time_t sec_since_epoch(int, int, int, int, int, int) +--echo # + +CREATE TABLE t1 (a DATE); +SET @@time_zone='+1:00'; +INSERT INTO t1 VALUES ('2024-00-01'); +SELECT UNIX_TIMESTAMP(MAX(a)) AS a FROM t1; +SET @@time_zone=DEFAULT; +DROP TABLE t1; + --echo # --echo # End of 10.5 tests --echo # diff --git a/sql/sql_type.cc b/sql/sql_type.cc index 44475e29bcc..98abf154db4 100644 --- a/sql/sql_type.cc +++ b/sql/sql_type.cc @@ -9182,6 +9182,7 @@ Type_handler_timestamp_common::Item_val_native_with_conversion(THD *thd, Datetime dt(thd, item, Datetime::Options(TIME_NO_ZERO_IN_DATE, thd)); return !dt.is_valid_datetime() || + dt.check_date(TIME_NO_ZERO_IN_DATE | TIME_NO_ZERO_DATE) || TIME_to_native(thd, dt.get_mysql_time(), to, item->datetime_precision(thd)); }