diff options
author | Alexander Barkov <bar@mariadb.com> | 2019-03-15 14:11:30 +0400 |
---|---|---|
committer | Alexander Barkov <bar@mariadb.com> | 2019-03-15 14:12:05 +0400 |
commit | b6dc47a0f72fb56b4e7e916dbf8df861949253e0 (patch) | |
tree | 39f2c4456f6cf41a2cea71bf96e5313c596968ed /sql/item_sum.cc | |
parent | 34db9958e28c325b0f708f78b7ff029de810d5ea (diff) | |
download | mariadb-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.cc | 12 |
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); |