summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Barkov <bar@mariadb.org>2016-08-08 18:37:02 +0400
committerAlexander Barkov <bar@mariadb.org>2016-08-08 18:37:02 +0400
commit5269d378dfd576ecd03c82b3e763a98c83235636 (patch)
tree0cf1b6099235503870553c08ca0b6696566e9392
parent1b3430a5ae6b2f6d5c251f1ff07f5c273b1dc175 (diff)
downloadmariadb-git-5269d378dfd576ecd03c82b3e763a98c83235636.tar.gz
MDEV-10468 Assertion `nr >= 0.0' failed in Item_sum_std::val_real()
-rw-r--r--mysql-test/r/func_group.result12
-rw-r--r--mysql-test/t/func_group.test6
-rw-r--r--sql/item_sum.cc2
3 files changed, 20 insertions, 0 deletions
diff --git a/mysql-test/r/func_group.result b/mysql-test/r/func_group.result
index 0253548236c..38fae2f0a4f 100644
--- a/mysql-test/r/func_group.result
+++ b/mysql-test/r/func_group.result
@@ -2297,3 +2297,15 @@ FROM t1;
C_1 C_2 C_3
NULL 100 200
DROP TABLE t1;
+#
+# MDEV-10468 Assertion `nr >= 0.0' failed in Item_sum_std::val_real()
+#
+SELECT STDDEV_POP(f) FROM (SELECT "1e+309" AS f UNION SELECT "-1e+309" AS f) tbl;
+STDDEV_POP(f)
+1.7976931348623157e308
+Warnings:
+Warning 1292 Truncated incorrect DOUBLE value: '1e+309'
+Warning 1292 Truncated incorrect DOUBLE value: '-1e+309'
+SELECT STDDEV(f) FROM (SELECT 1.7976931348623157e+308 AS f UNION SELECT -1.7976931348623157e+308 AS f) tbl;
+STDDEV(f)
+1.7976931348623157e308
diff --git a/mysql-test/t/func_group.test b/mysql-test/t/func_group.test
index 5824d99afa5..7013009fae7 100644
--- a/mysql-test/t/func_group.test
+++ b/mysql-test/t/func_group.test
@@ -1590,3 +1590,9 @@ SELECT
SUM(data3) AS C_3
FROM t1;
DROP TABLE t1;
+
+--echo #
+--echo # MDEV-10468 Assertion `nr >= 0.0' failed in Item_sum_std::val_real()
+--echo #
+SELECT STDDEV_POP(f) FROM (SELECT "1e+309" AS f UNION SELECT "-1e+309" AS f) tbl;
+SELECT STDDEV(f) FROM (SELECT 1.7976931348623157e+308 AS f UNION SELECT -1.7976931348623157e+308 AS f) tbl;
diff --git a/sql/item_sum.cc b/sql/item_sum.cc
index 445895111ed..02d2875195d 100644
--- a/sql/item_sum.cc
+++ b/sql/item_sum.cc
@@ -1762,6 +1762,8 @@ double Item_sum_std::val_real()
{
DBUG_ASSERT(fixed == 1);
double nr= Item_sum_variance::val_real();
+ if (my_isinf(nr))
+ return DBL_MAX;
DBUG_ASSERT(nr >= 0.0);
return sqrt(nr);
}