From 3ca1852cbaac852f778af0e70278cf3a010f4403 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 25 Apr 2006 14:34:19 +0500 Subject: [PATCH] Fix for bug #18501: Server crashes with monthname(). mysql-test/r/func_time.result: Fix for bug #18501: Server crashes with monthname(). - test case mysql-test/t/func_time.test: Fix for bug #18501: Server crashes with monthname(). - test case sql/item_timefunc.cc: Fix for bug #18501: Server crashes with monthname(). - check null_value as well. --- mysql-test/r/func_time.result | 4 ++++ mysql-test/t/func_time.test | 7 +++++++ sql/item_timefunc.cc | 4 ++-- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/func_time.result b/mysql-test/r/func_time.result index fc872285acb..02f3d2f7273 100644 --- a/mysql-test/r/func_time.result +++ b/mysql-test/r/func_time.result @@ -626,3 +626,7 @@ last_day('2005-01-00') NULL Warnings: Warning 1292 Truncated incorrect datetime value: '2005-01-00' +select monthname(str_to_date(null, '%m')), monthname(str_to_date(null, '%m')), +monthname(str_to_date(1, '%m')), monthname(str_to_date(0, '%m')); +monthname(str_to_date(null, '%m')) monthname(str_to_date(null, '%m')) monthname(str_to_date(1, '%m')) monthname(str_to_date(0, '%m')) +NULL NULL January NULL diff --git a/mysql-test/t/func_time.test b/mysql-test/t/func_time.test index 68a33afd85c..01e4e47d318 100644 --- a/mysql-test/t/func_time.test +++ b/mysql-test/t/func_time.test @@ -315,4 +315,11 @@ select last_day('2005-00-00'); select last_day('2005-00-01'); select last_day('2005-01-00'); +# +# Bug #18501: monthname and NULLs +# + +select monthname(str_to_date(null, '%m')), monthname(str_to_date(null, '%m')), + monthname(str_to_date(1, '%m')), monthname(str_to_date(0, '%m')); + # End of 4.1 tests diff --git a/sql/item_timefunc.cc b/sql/item_timefunc.cc index f3d6858755c..ffd8c79dca8 100644 --- a/sql/item_timefunc.cc +++ b/sql/item_timefunc.cc @@ -905,9 +905,9 @@ String* Item_func_monthname::val_str(String* str) { DBUG_ASSERT(fixed == 1); const char *month_name; - uint month=(uint) Item_func_month::val_int(); + uint month= (uint) val_int(); - if (!month) // This is also true for NULL + if (null_value || !month) { null_value=1; return (String*) 0;