From: Alexander Barkov Date: January 17 2011 12:36pm Subject: bzr commit into mysql-trunk branch (alexander.barkov:3520) List-Archive: http://lists.mysql.com/commits/128955 Message-Id: <201101171236.p0HCaCUh007256@bar.myoffice.izhnet.ru> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit #At file:///home/bar/mysql-bzr/mysql-trunk/ based on revid:hezx@stripped 3520 Alexander Barkov 2011-01-17 [merge] Merging from 5.5 modified: mysql-test/r/ctype_many.result mysql-test/t/ctype_many.test sql/item_strfunc.cc sql/item_strfunc.h === modified file 'mysql-test/r/ctype_many.result' --- a/mysql-test/r/ctype_many.result 2010-12-15 09:58:37 +0000 +++ b/mysql-test/r/ctype_many.result 2011-01-17 12:26:13 +0000 @@ -1684,6 +1684,21 @@ ARMENIAN CAPIT ECH 2 ARMENIAN CAPIT ZA 2 DROP TABLE t1; # +# Start of 5.1 tests +# +# +# Bug#58371 Assertion failed: !s.uses_buffer_owned_by(this) with format string function +# +SET NAMES latin1; +DO CONVERT(CAST(SUBSTRING_INDEX(FORMAT(1,'1111'), FORMAT('','Zpq'),1) +AS BINARY(0)) USING utf8); +Warnings: +Warning 1292 Truncated incorrect INTEGER value: 'Zpq' +Warning 1292 Truncated incorrect BINARY(0) value: '1.' +# +# End of 5.1 tests +# +# # Start of 5.5 tests # # === modified file 'mysql-test/t/ctype_many.test' --- a/mysql-test/t/ctype_many.test 2010-12-15 09:58:37 +0000 +++ b/mysql-test/t/ctype_many.test 2011-01-17 12:26:13 +0000 @@ -217,6 +217,21 @@ DROP TABLE t1; --echo # +--echo # Start of 5.1 tests +--echo # + +--echo # +--echo # Bug#58371 Assertion failed: !s.uses_buffer_owned_by(this) with format string function +--echo # + +SET NAMES latin1; +DO CONVERT(CAST(SUBSTRING_INDEX(FORMAT(1,'1111'), FORMAT('','Zpq'),1) + AS BINARY(0)) USING utf8); +--echo # +--echo # End of 5.1 tests +--echo # + +--echo # --echo # Start of 5.5 tests --echo # === modified file 'sql/item_strfunc.cc' --- a/sql/item_strfunc.cc 2011-01-13 08:19:52 +0000 +++ b/sql/item_strfunc.cc 2011-01-17 12:35:58 +0000 @@ -3056,22 +3056,16 @@ String *Item_func_conv_charset::val_str( DBUG_ASSERT(fixed == 1); if (use_cached_value) return null_value ? 0 : &str_value; - /* - Here we don't pass 'str' as a parameter to args[0]->val_str() - as 'str' may point to 'str_value' (e.g. see Item::save_in_field()), - which we use below to convert string. - Use argument's 'str_value' instead. - */ - String *arg= args[0]->val_str(&args[0]->str_value); + String *arg= args[0]->val_str(str); uint dummy_errors; if (!arg) { null_value=1; return 0; } - null_value= str_value.copy(arg->ptr(),arg->length(),arg->charset(), + null_value= tmp_value.copy(arg->ptr(), arg->length(), arg->charset(), conv_charset, &dummy_errors); - return null_value ? 0 : check_well_formed_result(&str_value); + return null_value ? 0 : check_well_formed_result(&tmp_value); } void Item_func_conv_charset::fix_length_and_dec() === modified file 'sql/item_strfunc.h' --- a/sql/item_strfunc.h 2011-01-13 08:19:52 +0000 +++ b/sql/item_strfunc.h 2011-01-17 12:35:58 +0000 @@ -812,6 +812,7 @@ public: class Item_func_conv_charset :public Item_str_func { bool use_cached_value; + String tmp_value; public: bool safe; CHARSET_INFO *conv_charset; // keep it public No bundle (reason: revision is a merge (you can force generation of a bundle with env var BZR_FORCE_BUNDLE=1)).