List:Commits« Previous MessageNext Message »
From:Jorgen Loland Date:November 3 2010 1:48pm
Subject:bzr commit into mysql-5.5-bugteam branch (jorgen.loland:3120) Bug#57882
View as plain text  
#At file:///export/home/jl208045/mysql/mysql-5.5-bugteam/ based on revid:alexander.nozdrin@stripped

 3120 Jorgen Loland	2010-11-03
      Bug#57882 - Item_func_conv_charset::val_str(String*): 
                  Assertion `fixed == 1' failed
      
      (also fixes duplicate bug 57515)
      
      agg_item_set_converter() (item.cc) handles conversion of 
      character sets by creating a new Item. fix_fields() is then 
      called on this newly created item. Prior to this patch, it was
      not checked whether fix_fields() was successful or not. Thus, 
      agg_item_set_converter() would return success even when an 
      error occured. This patch makes it return error (TRUE) if 
      fix_fields() fails.
     @ mysql-test/r/errors.result
        Add test for BUG#57882
     @ mysql-test/t/errors.test
        Add test for BUG#57882
     @ sql/item.cc
        Make agg_item_set_converter() return with error if fix_fields() 
        on the newly created converted item fails.

    modified:
      mysql-test/r/errors.result
      mysql-test/t/errors.test
      sql/item.cc
=== modified file 'mysql-test/r/errors.result'
--- a/mysql-test/r/errors.result	2010-05-27 16:01:43 +0000
+++ b/mysql-test/r/errors.result	2010-11-03 13:47:59 +0000
@@ -134,3 +134,15 @@ INSERT INTO t1 VALUES ('abc\0\0');
 INSERT INTO t1 VALUES ('abc\0\0');
 ERROR 23000: Duplicate entry 'abc\x00\x00' for key 'PRIMARY'
 DROP TABLE t1;
+#
+# Bug#57882: Item_func_conv_charset::val_str(String*): 
+#            Assertion `fixed == 1' failed
+#
+select (convert('0' using latin1) in (char(cot('v') using utf8),''));
+ERROR 22003: DOUBLE value is out of range in 'cot('v')'
+set names utf8 collate utf8_latvian_ci ;
+select updatexml(-73 * -2465717823867977728,@@global.slave_net_timeout,null);
+ERROR 22003: BIGINT value is out of range in '(-(73) * -(2465717823867977728))'
+#
+# End Bug#57882
+#

=== modified file 'mysql-test/t/errors.test'
--- a/mysql-test/t/errors.test	2010-05-27 16:01:43 +0000
+++ b/mysql-test/t/errors.test	2010-11-03 13:47:59 +0000
@@ -155,3 +155,19 @@ INSERT INTO t1 VALUES ('abc\0\0');
 --error ER_DUP_ENTRY
 INSERT INTO t1 VALUES ('abc\0\0');
 DROP TABLE t1;
+
+--echo #
+--echo # Bug#57882: Item_func_conv_charset::val_str(String*): 
+--echo #            Assertion `fixed == 1' failed
+--echo #
+
+--error ER_DATA_OUT_OF_RANGE
+select (convert('0' using latin1) in (char(cot('v') using utf8),''));
+
+set names utf8 collate utf8_latvian_ci ;
+--error ER_DATA_OUT_OF_RANGE
+select updatexml(-73 * -2465717823867977728,@@global.slave_net_timeout,null);
+
+--echo #
+--echo # End Bug#57882
+--echo #

=== modified file 'sql/item.cc'
--- a/sql/item.cc	2010-10-08 14:06:31 +0000
+++ b/sql/item.cc	2010-11-03 13:47:59 +0000
@@ -1857,7 +1857,11 @@ bool agg_item_set_converter(DTCollation 
       We do not check conv->fixed, because Item_func_conv_charset which can
       be return by safe_charset_converter can't be fixed at creation
     */
-    conv->fix_fields(thd, arg);
+    if (conv->fix_fields(thd, arg))
+    {
+      res= TRUE;
+      break; // we cannot return here, we need to restore "arena".
+    }
   }
   if (arena)
     thd->restore_active_arena(arena, &backup);


Attachment: [text/bzr-bundle] bzr/jorgen.loland@oracle.com-20101103134759-k6pbwr0nbeq4kvur.bundle
Thread
bzr commit into mysql-5.5-bugteam branch (jorgen.loland:3120) Bug#57882Jorgen Loland3 Nov
  • Re: bzr commit into mysql-5.5-bugteam branch (jorgen.loland:3120)Bug#57882Olav Sandstaa3 Nov