MDEV-18402 Assertion `sec.sec() <= 59' failed in Item_func_maketime::get_date

This commit is contained in:
Alexander Barkov 2019-04-02 11:40:22 +04:00
parent b9ea778f6c
commit ea5cda5269
3 changed files with 18 additions and 1 deletions

View file

@ -6336,3 +6336,12 @@ Warnings:
Warning 1292 Truncated incorrect DECIMAL value: 'foo'
Warning 1292 Truncated incorrect DECIMAL value: 'foo'
SET time_zone=DEFAULT;
#
# MDEV-18402 Assertion `sec.sec() <= 59' failed in Item_func_maketime::get_date
#
SELECT MAKETIME('01', '01', LEAST( -100, NULL ));
MAKETIME('01', '01', LEAST( -100, NULL ))
NULL
SELECT CONCAT(MAKETIME('01', '01', LEAST( -100, NULL )));
CONCAT(MAKETIME('01', '01', LEAST( -100, NULL )))
NULL

View file

@ -3162,3 +3162,11 @@ SELECT TIME('- 01:00:00'), TIME('- 1 01:00:00');
SET time_zone='+00:00';
SELECT NULLIF(FROM_UNIXTIME('foo'), '2012-12-12 21:10:14');
SET time_zone=DEFAULT;
--echo #
--echo # MDEV-18402 Assertion `sec.sec() <= 59' failed in Item_func_maketime::get_date
--echo #
SELECT MAKETIME('01', '01', LEAST( -100, NULL ));
SELECT CONCAT(MAKETIME('01', '01', LEAST( -100, NULL )));

View file

@ -2595,7 +2595,7 @@ bool Item_func_maketime::get_date(THD *thd, MYSQL_TIME *ltime, date_mode_t fuzzy
longlong minute= args[1]->val_int();
VSec9 sec(thd, args[2], "seconds", 59);
DBUG_ASSERT(sec.sec() <= 59);
DBUG_ASSERT(sec.is_null() || sec.sec() <= 59);
if (args[0]->null_value || args[1]->null_value || sec.is_null() ||
minute < 0 || minute > 59 || sec.neg() || sec.truncated())
return (null_value= 1);