From 69d8bfe2319f313ab31f92a450890a870b630fe7 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 9 Nov 2006 16:17:50 +0400 Subject: [PATCH] Fix for bug #23653: Crash if last_day('0000-00-00') As get_arg0_date() in the Item_func_last_day::get_date() returns 0000-00-00 date sometimes, we have to check ltime->month for 0 after the call. mysql-test/r/func_time.result: Fix for bug #23653: Crash if last_day('0000-00-00') - test result. mysql-test/t/func_time.test: Fix for bug #23653: Crash if last_day('0000-00-00') - test case. sql/item_timefunc.cc: Fix for bug #23653: Crash if last_day('0000-00-00') - return error if month is 0. --- mysql-test/r/func_time.result | 3 +++ mysql-test/t/func_time.test | 6 ++++++ sql/item_timefunc.cc | 3 ++- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/func_time.result b/mysql-test/r/func_time.result index 5b2deeada55..ef95e0bd558 100644 --- a/mysql-test/r/func_time.result +++ b/mysql-test/r/func_time.result @@ -815,4 +815,7 @@ union (select time_format(timediff(now(), DATE_SUB(now(),INTERVAL 5 HOUR)),'%k') As H); H 5 +select last_day('0000-00-00'); +last_day('0000-00-00') +NULL End of 4.1 tests diff --git a/mysql-test/t/func_time.test b/mysql-test/t/func_time.test index 066a059483c..a9b6be0cc72 100644 --- a/mysql-test/t/func_time.test +++ b/mysql-test/t/func_time.test @@ -446,4 +446,10 @@ union union (select time_format(timediff(now(), DATE_SUB(now(),INTERVAL 5 HOUR)),'%k') As H); +# +# Bug #23653: crash if last_day('0000-00-00') +# + +select last_day('0000-00-00'); + --echo End of 4.1 tests diff --git a/sql/item_timefunc.cc b/sql/item_timefunc.cc index c1bca7afc60..ec424910f54 100644 --- a/sql/item_timefunc.cc +++ b/sql/item_timefunc.cc @@ -3058,7 +3058,8 @@ String *Item_func_str_to_date::val_str(String *str) bool Item_func_last_day::get_date(TIME *ltime, uint fuzzy_date) { - if (get_arg0_date(ltime, fuzzy_date & ~TIME_FUZZY_DATE)) + if (get_arg0_date(ltime, fuzzy_date & ~TIME_FUZZY_DATE) || + (ltime->month == 0)) return 1; uint month_idx= ltime->month-1; ltime->day= days_in_month[month_idx];