summaryrefslogtreecommitdiff
path: root/sql/item_sum.cc
diff options
context:
space:
mode:
authorAlexander Barkov <bar@mariadb.com>2019-03-15 14:11:30 +0400
committerAlexander Barkov <bar@mariadb.com>2019-03-15 14:12:05 +0400
commitb6dc47a0f72fb56b4e7e916dbf8df861949253e0 (patch)
tree39f2c4456f6cf41a2cea71bf96e5313c596968ed /sql/item_sum.cc
parent34db9958e28c325b0f708f78b7ff029de810d5ea (diff)
downloadmariadb-git-b6dc47a0f72fb56b4e7e916dbf8df861949253e0.tar.gz
MDEV-17643 Assertion `nr >= 0.0' failed in Item_sum_std::val_real()
Diffstat (limited to 'sql/item_sum.cc')
-rw-r--r--sql/item_sum.cc12
1 files changed, 12 insertions, 0 deletions
diff --git a/sql/item_sum.cc b/sql/item_sum.cc
index b4e31ba012f..5e7ce270dc3 100644
--- a/sql/item_sum.cc
+++ b/sql/item_sum.cc
@@ -1765,6 +1765,18 @@ double Item_sum_std::val_real()
{
DBUG_ASSERT(fixed == 1);
double nr= Item_sum_variance::val_real();
+ if (isnan(nr))
+ {
+ /*
+ variance_fp_recurrence_next() can overflow in some cases and return "nan":
+
+ CREATE OR REPLACE TABLE t1 (a DOUBLE);
+ INSERT INTO t1 VALUES (1.7e+308), (-1.7e+308), (0);
+ SELECT STDDEV_SAMP(a) FROM t1;
+ */
+ null_value= true; // Convert "nan" to NULL
+ return 0;
+ }
if (my_isinf(nr))
return DBL_MAX;
DBUG_ASSERT(nr >= 0.0);