Commit c6fdd918 authored by MySQL Build Team's avatar MySQL Build Team

Backport into build-200906240007-5.1.34sp1

> ------------------------------------------------------------
> revno: 2852.1.10
> revision-id: sergey.glukhov@sun.com-20090409093850-z3vgmz8fqogv8o1o
> parent: v.narayanan@sun.com-20090409081823-zsw611isjcorl63b
> parent: sergey.glukhov@sun.com-20090409091931-2zhtgonllfmsxjex
> committer: Sergey Glukhov <Sergey.Glukhov@sun.com>
> branch nick: mysql-5.1-bugteam
> timestamp: Thu 2009-04-09 14:38:50 +0500
> message:
>   5.0-bugteam->5.1-bugteam merge
>     ------------------------------------------------------------
>     revno: 1810.3882.6
>     revision-id: sergey.glukhov@sun.com-20090409091931-2zhtgonllfmsxjex
>     parent: anurag.shekhar@sun.com-20090409080004-xvxy663jan45tb3c
>     committer: Sergey Glukhov <Sergey.Glukhov@sun.com>
>     branch nick: mysql-5.0-bugteam
>     timestamp: Thu 2009-04-09 14:19:31 +0500
>     message:
>       Bug#43833 Simple INSERT crashes the server
>       The crash happens due to wrong 'digits' variable value(0),
>       'digits' can not be 0, so the fix is use 1 as min allowed value.
parent 0bc567d0
......@@ -633,4 +633,9 @@ SELECT * FROM t2;
c1
15449237462
DROP TABLE t1, t2;
CREATE TABLE t1(f1 FLOAT);
INSERT INTO t1 VALUES (1.23);
CREATE TABLE t2(f1 CHAR(1));
INSERT INTO t2 SELECT f1 FROM t1;
DROP TABLE t1, t2;
End of 5.0 tests.
......@@ -488,5 +488,14 @@ SELECT * FROM t2;
DROP TABLE t1, t2;
#
# Bug#43833 Simple INSERT crashes the server
#
CREATE TABLE t1(f1 FLOAT);
INSERT INTO t1 VALUES (1.23);
CREATE TABLE t2(f1 CHAR(1));
INSERT INTO t2 SELECT f1 FROM t1;
DROP TABLE t1, t2;
--echo End of 5.0 tests.
......@@ -6448,13 +6448,13 @@ int Field_str::store(double nr)
calculate the maximum number of significant digits if the 'f'-format
would be used (+1 for decimal point if the number has a fractional part).
*/
digits= max(0, (int) max_length - fractional);
digits= max(1, (int) max_length - fractional);
/*
If the exponent is negative, decrease digits by the number of leading zeros
after the decimal point that do not count as significant digits.
*/
if (exp < 0)
digits= max(0, (int) digits + exp);
digits= max(1, (int) digits + exp);
/*
'e'-format is used only if the exponent is less than -4 or greater than or
equal to the precision. In this case we need to adjust the number of
......@@ -6462,7 +6462,7 @@ int Field_str::store(double nr)
We also have to reserve one additional character if abs(exp) >= 100.
*/
if (exp >= (int) digits || exp < -4)
digits= max(0, (int) (max_length - 5 - (exp >= 100 || exp <= -100)));
digits= max(1, (int) (max_length - 5 - (exp >= 100 || exp <= -100)));
/* Limit precision to DBL_DIG to avoid garbage past significant digits */
set_if_smaller(digits, DBL_DIG);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment