summaryrefslogtreecommitdiff
path: root/sql/item_sum.cc
diff options
context:
space:
mode:
authorTor Didriksen <tor.didriksen@oracle.com>2011-02-11 16:20:27 +0100
committerTor Didriksen <tor.didriksen@oracle.com>2011-02-11 16:20:27 +0100
commit32e6d14728673debf6b005a4418248ae017d7ac3 (patch)
tree2fd0684e2322a5763aba6c0433c724d7c93d7c28 /sql/item_sum.cc
parent77c0f33ee2b2ad46088364630275735f9d744ed2 (diff)
downloadmariadb-git-32e6d14728673debf6b005a4418248ae017d7ac3.tar.gz
Bug #59686 crash in String::copy() with time data type
The problem was that Item_sum_hybrid::val_xxx() did not propagate null values up the expression tree.
Diffstat (limited to 'sql/item_sum.cc')
-rw-r--r--sql/item_sum.cc20
1 files changed, 16 insertions, 4 deletions
diff --git a/sql/item_sum.cc b/sql/item_sum.cc
index adfa1ea66f0..8855ef05c84 100644
--- a/sql/item_sum.cc
+++ b/sql/item_sum.cc
@@ -1903,7 +1903,10 @@ double Item_sum_hybrid::val_real()
DBUG_ASSERT(fixed == 1);
if (null_value)
return 0.0;
- return value->val_real();
+ double retval= value->val_real();
+ if ((null_value= value->null_value))
+ DBUG_ASSERT(retval == 0.0);
+ return retval;
}
longlong Item_sum_hybrid::val_int()
@@ -1911,7 +1914,10 @@ longlong Item_sum_hybrid::val_int()
DBUG_ASSERT(fixed == 1);
if (null_value)
return 0;
- return value->val_int();
+ longlong retval= value->val_int();
+ if ((null_value= value->null_value))
+ DBUG_ASSERT(retval == 0);
+ return retval;
}
@@ -1920,7 +1926,10 @@ my_decimal *Item_sum_hybrid::val_decimal(my_decimal *val)
DBUG_ASSERT(fixed == 1);
if (null_value)
return 0;
- return value->val_decimal(val);
+ my_decimal *retval= value->val_decimal(val);
+ if ((null_value= value->null_value))
+ DBUG_ASSERT(retval == NULL);
+ return retval;
}
@@ -1930,7 +1939,10 @@ Item_sum_hybrid::val_str(String *str)
DBUG_ASSERT(fixed == 1);
if (null_value)
return 0;
- return value->val_str(str);
+ String *retval= value->val_str(str);
+ if ((null_value= value->null_value))
+ DBUG_ASSERT(retval == NULL);
+ return retval;
}