List:Commits« Previous MessageNext Message »
From:Sergey Glukhov Date:April 20 2011 7:57am
Subject:bzr push into mysql-5.1 branch (sergey.glukhov:3665 to 3666) Bug#11764671
Bug#11765923
View as plain text  
 3666 Sergey Glukhov	2011-04-20
      Bug#11765923  58937: MANY VALGRIND ERRORS AFTER GROUPING BY RESULT OF DECIMAL COLUMN FUNCTION
      Bug#11764671  57533: UNINITIALISED VALUES IN COPY_AND_CONVERT (SQL_STRING.CC) WITH CERTAIN CHA
      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. Issue is introduced by
      Bug33143 fix. The fix is to remove erroneous assignment.
     @ mysql-test/r/func_math.result
        test case
     @ mysql-test/t/func_math.test
        test case
     @ sql/item_func.cc
        remove erroneous assignment

    modified:
      mysql-test/r/func_math.result
      mysql-test/t/func_math.test
      sql/item_func.cc
 3665 Serge Kozlov	2011-04-18
      BUG#12371924
      Update test case

    modified:
      mysql-test/collections/default.experimental
      mysql-test/suite/binlog/r/binlog_bug23533.result
      mysql-test/suite/binlog/t/binlog_bug23533.test
=== 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-20 07:39:20 +0000
@@ -518,4 +518,26 @@ 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;
+#
+# Bug#11764671  57533: UNINITIALISED VALUES IN COPY_AND_CONVERT (SQL_STRING.CC) WITH CERTAIN CHA
+#
+SELECT ROUND(LEAST(15, -4939092, 0.2704), STDDEV('a'));
+ROUND(LEAST(15, -4939092, 0.2704), STDDEV('a'))
+-4939092.0000
+Warnings:
+Warning	1292	Truncated incorrect DOUBLE value: 'a'
 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-20 07:39:20 +0000
@@ -333,4 +333,20 @@ 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 #
+--echo # Bug#11764671  57533: UNINITIALISED VALUES IN COPY_AND_CONVERT (SQL_STRING.CC) WITH CERTAIN CHA
+--echo #
+
+SELECT ROUND(LEAST(15, -4939092, 0.2704), STDDEV('a'));
+
 --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-20 07:39:20 +0000
@@ -2122,10 +2122,7 @@ my_decimal *Item_func_round::decimal_op(
   if (!(null_value= (args[0]->null_value || args[1]->null_value ||
                      my_decimal_round(E_DEC_FATAL_ERROR, value, (int) dec,
                                       truncate, decimal_value) > 1))) 
-  {
-    decimal_value->frac= decimals;
     return decimal_value;
-  }
   return 0;
 }
 

No bundle (reason: useless for push emails).
Thread
bzr push into mysql-5.1 branch (sergey.glukhov:3665 to 3666) Bug#11764671Bug#11765923Sergey Glukhov20 Apr