From: Sergey Glukhov Date: December 21 2010 12:42pm Subject: bzr push into mysql-trunk-bugfixing branch (sergey.glukhov:3462 to 3463) List-Archive: http://lists.mysql.com/commits/127430 Message-Id: <201012211253.oBLCr7TU022138@rcsinet15.oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 3463 Sergey Glukhov 2010-12-21 [merge] automerge 3462 Sergey Glukhov 2010-12-21 [merge] automerge modified: mysql-test/include/rpl_start_server.inc mysql-test/include/rpl_stop_server.inc mysql-test/suite/rpl/r/rpl_do_grant.result mysql-test/suite/rpl/t/rpl_do_grant.test sql/protocol.cc === modified file 'mysql-test/r/func_group.result' --- a/mysql-test/r/func_group.result 2010-12-07 16:16:29 +0000 +++ b/mysql-test/r/func_group.result 2010-12-21 12:34:13 +0000 @@ -1724,6 +1724,19 @@ m 1 DROP TABLE t1; # +# Bug#58030 crash in Item_func_geometry_from_text::val_str +# +SELECT MAX(TIMESTAMP(RAND(0))); +SELECT MIN(TIMESTAMP(RAND(0))); +# +# Bug#58177 crash and valgrind warnings in decimal and protocol sending functions... +# +SELECT MIN(GET_LOCK('aaaaaaaaaaaaaaaaa',0) / '0b1111111111111111111111111111111111111111111111111111111111111111111111111' ^ (RAND())); +SELECT MIN(GET_LOCK('aaaaaaaaaaaaaaaaa',0) / '0b1111111111111111111111111111111111111111111111111111111111111111111111111' ^ (RAND())); +SELECT MIN(GET_LOCK('aaaaaaaaaaaaaaaaa',0) / '0b1111111111111111111111111111111111111111111111111111111111111111111111111' ^ (RAND())); +SELECT MIN(GET_LOCK('aaaaaaaaaaaaaaaaa',0) / '0b1111111111111111111111111111111111111111111111111111111111111111111111111' ^ (RAND())); +SELECT RELEASE_LOCK('aaaaaaaaaaaaaaaaa'); +# End of 5.1 tests # # Bug#52123 Assertion failed: aggregator == aggr->Aggrtype(), === modified file 'mysql-test/t/func_group.test' --- a/mysql-test/t/func_group.test 2010-12-07 16:16:29 +0000 +++ b/mysql-test/t/func_group.test 2010-12-21 12:34:13 +0000 @@ -1098,6 +1098,27 @@ SELECT MAX((SELECT 1 FROM t1 ORDER BY @v DROP TABLE t1; --echo # +--echo # Bug#58030 crash in Item_func_geometry_from_text::val_str +--echo # + +--disable_result_log + +SELECT MAX(TIMESTAMP(RAND(0))); +SELECT MIN(TIMESTAMP(RAND(0))); + +--echo # +--echo # Bug#58177 crash and valgrind warnings in decimal and protocol sending functions... +--echo # + +SELECT MIN(GET_LOCK('aaaaaaaaaaaaaaaaa',0) / '0b1111111111111111111111111111111111111111111111111111111111111111111111111' ^ (RAND())); +SELECT MIN(GET_LOCK('aaaaaaaaaaaaaaaaa',0) / '0b1111111111111111111111111111111111111111111111111111111111111111111111111' ^ (RAND())); +SELECT MIN(GET_LOCK('aaaaaaaaaaaaaaaaa',0) / '0b1111111111111111111111111111111111111111111111111111111111111111111111111' ^ (RAND())); +SELECT MIN(GET_LOCK('aaaaaaaaaaaaaaaaa',0) / '0b1111111111111111111111111111111111111111111111111111111111111111111111111' ^ (RAND())); +SELECT RELEASE_LOCK('aaaaaaaaaaaaaaaaa'); + +--enable_result_log + +--echo # --echo End of 5.1 tests ### === modified file 'sql/item.cc' --- a/sql/item.cc 2010-12-17 11:28:59 +0000 +++ b/sql/item.cc 2010-12-21 12:27:36 +0000 @@ -5930,6 +5930,10 @@ bool Item::send(Protocol *protocol, Stri String *res; if ((res=val_str(buffer))) result= protocol->store(res->ptr(),res->length(),res->charset()); + else + { + DBUG_ASSERT(null_value); + } break; } case MYSQL_TYPE_TINY: === modified file 'sql/item_sum.cc' --- a/sql/item_sum.cc 2010-12-17 11:28:59 +0000 +++ b/sql/item_sum.cc 2010-12-21 12:27:36 +0000 @@ -1199,8 +1199,10 @@ void Item_sum_hybrid::setup_hybrid(Item value= Item_cache::get_cache(item); value->setup(item); value->store(value_arg); + arg_cache= Item_cache::get_cache(item); + arg_cache->setup(item); cmp= new Arg_comparator(); - cmp->set_cmp_func(this, args, (Item**)&value, FALSE); + cmp->set_cmp_func(this, (Item**)&arg_cache, (Item**)&value, FALSE); collation.set(item->collation); } @@ -1969,11 +1971,11 @@ Item *Item_sum_min::copy_or_same(THD* th bool Item_sum_min::add() { /* args[0] < value */ - int res= cmp->compare(); - if (!args[0]->null_value && - (null_value || res < 0)) + arg_cache->cache_value(); + if (!arg_cache->null_value && + (null_value || cmp->compare() < 0)) { - value->store(args[0]); + value->store(arg_cache); value->cache_value(); null_value= 0; } @@ -1992,11 +1994,11 @@ Item *Item_sum_max::copy_or_same(THD* th bool Item_sum_max::add() { /* args[0] > value */ - int res= cmp->compare(); - if (!args[0]->null_value && - (null_value || res > 0)) + arg_cache->cache_value(); + if (!arg_cache->null_value && + (null_value || cmp->compare() > 0)) { - value->store(args[0]); + value->store(arg_cache); value->cache_value(); null_value= 0; } === modified file 'sql/item_sum.h' --- a/sql/item_sum.h 2010-12-08 12:55:40 +0000 +++ b/sql/item_sum.h 2010-12-21 12:27:36 +0000 @@ -992,7 +992,7 @@ class Item_cache; class Item_sum_hybrid :public Item_sum { protected: - Item_cache *value; + Item_cache *value, *arg_cache; Arg_comparator *cmp; Item_result hybrid_type; enum_field_types hybrid_field_type; @@ -1001,14 +1001,14 @@ protected: public: Item_sum_hybrid(Item *item_par,int sign) - :Item_sum(item_par), value(0), cmp(0), + :Item_sum(item_par), value(0), arg_cache(0), cmp(0), hybrid_type(INT_RESULT), hybrid_field_type(MYSQL_TYPE_LONGLONG), cmp_sign(sign), was_values(TRUE) { collation.set(&my_charset_bin); } Item_sum_hybrid(THD *thd, Item_sum_hybrid *item) - :Item_sum(thd, item), value(item->value), hybrid_type(item->hybrid_type), - hybrid_field_type(item->hybrid_field_type), cmp_sign(item->cmp_sign), - was_values(item->was_values) + :Item_sum(thd, item), value(item->value), arg_cache(0), + hybrid_type(item->hybrid_type), hybrid_field_type(item->hybrid_field_type), + cmp_sign(item->cmp_sign), was_values(item->was_values) { } bool fix_fields(THD *, Item **); void setup_hybrid(Item *item, Item *value_arg); No bundle (reason: useless for push emails).