summaryrefslogtreecommitdiff
path: root/sql/field.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/field.cc')
-rw-r--r--sql/field.cc10
1 files changed, 8 insertions, 2 deletions
diff --git a/sql/field.cc b/sql/field.cc
index d865d2cc9e9..d5499eca075 100644
--- a/sql/field.cc
+++ b/sql/field.cc
@@ -2308,7 +2308,12 @@ int Field_float::store(double nr)
else
{
max_value= (log_10[field_length]-1)/log_10[dec];
- nr= floor(nr*log_10[dec]+0.5)/log_10[dec];
+ /*
+ The following comparison is needed to not get an overflow if nr
+ is close to FLT_MAX
+ */
+ if (fabs(nr) < FLT_MAX/10.0e+32)
+ nr= floor(nr*log_10[dec]+0.5)/log_10[dec];
}
if (nr < -max_value)
{
@@ -2603,7 +2608,8 @@ int Field_double::store(double nr)
else
{
max_value= (log_10[field_length]-1)/log_10[dec];
- nr= floor(nr*log_10[dec]+0.5)/log_10[dec];
+ if (fabs(nr) < DBL_MAX/10.0e+32)
+ nr= floor(nr*log_10[dec]+0.5)/log_10[dec];
}
if (nr < -max_value)
{