summaryrefslogtreecommitdiff
path: root/sql/item_func.cc
diff options
context:
space:
mode:
authorSergey Glukhov <Sergey.Glukhov@sun.com>2009-06-02 11:38:13 +0500
committerSergey Glukhov <Sergey.Glukhov@sun.com>2009-06-02 11:38:13 +0500
commit83ec6e05926e28a17a3576fa99545f79f5ce8a8c (patch)
treefeaf78789a7104118740c975304683318faad5ae /sql/item_func.cc
parent87879894732352483a5babb20450e64c40495c66 (diff)
downloadmariadb-git-83ec6e05926e28a17a3576fa99545f79f5ce8a8c.tar.gz
Bug#45152 crash with round() function on longtext column in a derived table
The crash happens due to wrong max_length value which is set on Item_func_round::fix_length_and_dec() stage. The value is set to args[0]->max_length which is too big in case of LONGTEXT(LONGBLOB) fields. The fix is to set max_length using float_length() function.
Diffstat (limited to 'sql/item_func.cc')
-rw-r--r--sql/item_func.cc4
1 files changed, 2 insertions, 2 deletions
diff --git a/sql/item_func.cc b/sql/item_func.cc
index 46e0f30d94e..2421f7e0526 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -1958,8 +1958,8 @@ void Item_func_round::fix_length_and_dec()
unsigned_flag= args[0]->unsigned_flag;
if (!args[1]->const_item())
{
- max_length= args[0]->max_length;
decimals= args[0]->decimals;
+ max_length= float_length(decimals);
if (args[0]->result_type() == DECIMAL_RESULT)
{
max_length++;
@@ -1979,8 +1979,8 @@ void Item_func_round::fix_length_and_dec()
if (args[0]->decimals == NOT_FIXED_DEC)
{
- max_length= args[0]->max_length;
decimals= min(decimals_to_set, NOT_FIXED_DEC);
+ max_length= float_length(decimals);
hybrid_type= REAL_RESULT;
return;
}