From: Sergey Glukhov Date: April 11 2011 9:22am Subject: bzr commit into mysql-5.1 branch (sergey.glukhov:3646) Bug#11765923 List-Archive: http://lists.mysql.com/commits/135169 X-Bug: 11765923 Message-Id: <201104110922.p3B9MKCx031979@acsmt357.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============3040093648217537073==" --===============3040093648217537073== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/gluh/MySQL/mysql-5.1/ based on revid:sergey.glukhov@stripped 3646 Sergey Glukhov 2011-04-11 Bug#11765923 58937: MANY VALGRIND ERRORS AFTER GROUPING BY RESULT OF DECIMAL COLUMN FUNCTION When ROUND evaluates decimal result it uses Item::decimal value as fraction value for the result. In some cases Item::decimal is greater than real result fraction value and uninitialised memory of result(decimal) buffer can be used in further calculations. The fix is to use minimum between decimal_value->frac and Item::decimals. @ mysql-test/r/func_math.result test case @ mysql-test/t/func_math.test test case @ sql/item_func.cc The fix is to use minimum between decimal_value->frac and Item::decimals. modified: mysql-test/r/func_math.result mysql-test/t/func_math.test sql/item_func.cc === modified file 'mysql-test/r/func_math.result' --- a/mysql-test/r/func_math.result 2011-03-28 08:35:50 +0000 +++ b/mysql-test/r/func_math.result 2011-04-11 09:22:44 +0000 @@ -518,4 +518,18 @@ CREATE TABLE t1 SELECT CEIL(LINESTRINGFR DROP TABLE t1; CREATE TABLE t1 SELECT FLOOR(LINESTRINGFROMWKB(1) DIV NULL); DROP TABLE t1; +# +# Bug#11765923 58937: MANY VALGRIND ERRORS AFTER GROUPING BY RESULT OF DECIMAL COLUMN FUNCTION +# +CREATE TABLE t1(f1 DECIMAL(22,1)); +INSERT INTO t1 VALUES (0),(1); +SELECT ROUND(f1, f1) FROM t1; +ROUND(f1, f1) +0.0 +1.0 +SELECT ROUND(f1, f1) FROM t1 GROUP BY 1; +ROUND(f1, f1) +0.0 +1.0 +DROP TABLE t1; End of 5.1 tests === modified file 'mysql-test/t/func_math.test' --- a/mysql-test/t/func_math.test 2011-03-28 08:35:50 +0000 +++ b/mysql-test/t/func_math.test 2011-04-11 09:22:44 +0000 @@ -333,4 +333,14 @@ DROP TABLE t1; CREATE TABLE t1 SELECT FLOOR(LINESTRINGFROMWKB(1) DIV NULL); DROP TABLE t1; +--echo # +--echo # Bug#11765923 58937: MANY VALGRIND ERRORS AFTER GROUPING BY RESULT OF DECIMAL COLUMN FUNCTION +--echo # + +CREATE TABLE t1(f1 DECIMAL(22,1)); +INSERT INTO t1 VALUES (0),(1); +SELECT ROUND(f1, f1) FROM t1; +SELECT ROUND(f1, f1) FROM t1 GROUP BY 1; +DROP TABLE t1; + --echo End of 5.1 tests === modified file 'sql/item_func.cc' --- a/sql/item_func.cc 2011-03-28 13:27:44 +0000 +++ b/sql/item_func.cc 2011-04-11 09:22:44 +0000 @@ -2123,7 +2123,7 @@ my_decimal *Item_func_round::decimal_op( my_decimal_round(E_DEC_FATAL_ERROR, value, (int) dec, truncate, decimal_value) > 1))) { - decimal_value->frac= decimals; + decimal_value->frac= min(decimal_value->frac, decimals); return decimal_value; } return 0; --===============3040093648217537073== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/sergey.glukhov@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: sergey.glukhov@stripped\ # k4punz0qkq82i4ik # target_branch: file:///home/gluh/MySQL/mysql-5.1/ # testament_sha1: 86b728c6b29caa64759f1fdd288d00fcb4e64b30 # timestamp: 2011-04-11 13:22:51 +0400 # source_branch: bzr+ssh://sgluhov@stripped/bzrroot\ # /server/mysql-5.1/ # base_revision_id: sergey.glukhov@stripped\ # ighkkh6m1p94mk0g # # Begin bundle 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 WkokgRwZ5mTgnBmJydOgNGav/i7kinChIDPxftw= --===============3040093648217537073==--