Loading mysql-test/r/sp.result +10 −0 Original line number Diff line number Diff line Loading @@ -4848,4 +4848,14 @@ c 2 b 3 a 1 delete from t1| drop procedure if exists bug18787| create procedure bug18787() begin declare continue handler for sqlexception begin end; select no_such_function(); end| call bug18787()| no_such_function() NULL drop procedure bug18787| drop table t1,t2; mysql-test/t/sp.test +18 −0 Original line number Diff line number Diff line Loading @@ -5698,6 +5698,24 @@ select * from t1 order by @x| delete from t1| # # BUG#18787: Server crashed when calling a stored procedure containing # a misnamed function # --disable_warnings drop procedure if exists bug18787| --enable_warnings create procedure bug18787() begin declare continue handler for sqlexception begin end; select no_such_function(); end| call bug18787()| drop procedure bug18787| # # BUG#NNNN: New bug synopsis # Loading sql/item_func.cc +14 −8 Original line number Diff line number Diff line Loading @@ -4744,7 +4744,9 @@ Item_func_sp::sp_result_field(void) const share->table_cache_key = empty_name; share->table_name = empty_name; } field= m_sp->create_result_field(max_length, name, dummy_table); if (!(field= m_sp->create_result_field(max_length, name, dummy_table))) my_message(ER_OUT_OF_RESOURCES, ER(ER_OUT_OF_RESOURCES), MYF(0)); DBUG_RETURN(field); } Loading Loading @@ -4772,8 +4774,9 @@ Item_func_sp::execute(Field **flp) { if (!(*flp= f= sp_result_field())) { my_message(ER_OUT_OF_RESOURCES, ER(ER_OUT_OF_RESOURCES), MYF(0)); return 0; /* Error set by sp_result_field() */ null_value= 1; return TRUE; } f->move_field((f->pack_length() > sizeof(result_buf)) ? Loading Loading @@ -4928,16 +4931,19 @@ longlong Item_func_found_rows::val_int() Field * Item_func_sp::tmp_table_field(TABLE *t_arg) { Field *res= 0; Field *field= 0; DBUG_ENTER("Item_func_sp::tmp_table_field"); if (m_sp) res= m_sp->create_result_field(max_length, (const char*) name, t_arg); field= m_sp->create_result_field(max_length, (const char*) name, t_arg); if (!res) res= Item_func::tmp_table_field(t_arg); if (!field) field= Item_func::tmp_table_field(t_arg); DBUG_RETURN(res); if (!field) my_message(ER_OUT_OF_RESOURCES, ER(ER_OUT_OF_RESOURCES), MYF(0)); DBUG_RETURN(field); } Loading Loading
mysql-test/r/sp.result +10 −0 Original line number Diff line number Diff line Loading @@ -4848,4 +4848,14 @@ c 2 b 3 a 1 delete from t1| drop procedure if exists bug18787| create procedure bug18787() begin declare continue handler for sqlexception begin end; select no_such_function(); end| call bug18787()| no_such_function() NULL drop procedure bug18787| drop table t1,t2;
mysql-test/t/sp.test +18 −0 Original line number Diff line number Diff line Loading @@ -5698,6 +5698,24 @@ select * from t1 order by @x| delete from t1| # # BUG#18787: Server crashed when calling a stored procedure containing # a misnamed function # --disable_warnings drop procedure if exists bug18787| --enable_warnings create procedure bug18787() begin declare continue handler for sqlexception begin end; select no_such_function(); end| call bug18787()| drop procedure bug18787| # # BUG#NNNN: New bug synopsis # Loading
sql/item_func.cc +14 −8 Original line number Diff line number Diff line Loading @@ -4744,7 +4744,9 @@ Item_func_sp::sp_result_field(void) const share->table_cache_key = empty_name; share->table_name = empty_name; } field= m_sp->create_result_field(max_length, name, dummy_table); if (!(field= m_sp->create_result_field(max_length, name, dummy_table))) my_message(ER_OUT_OF_RESOURCES, ER(ER_OUT_OF_RESOURCES), MYF(0)); DBUG_RETURN(field); } Loading Loading @@ -4772,8 +4774,9 @@ Item_func_sp::execute(Field **flp) { if (!(*flp= f= sp_result_field())) { my_message(ER_OUT_OF_RESOURCES, ER(ER_OUT_OF_RESOURCES), MYF(0)); return 0; /* Error set by sp_result_field() */ null_value= 1; return TRUE; } f->move_field((f->pack_length() > sizeof(result_buf)) ? Loading Loading @@ -4928,16 +4931,19 @@ longlong Item_func_found_rows::val_int() Field * Item_func_sp::tmp_table_field(TABLE *t_arg) { Field *res= 0; Field *field= 0; DBUG_ENTER("Item_func_sp::tmp_table_field"); if (m_sp) res= m_sp->create_result_field(max_length, (const char*) name, t_arg); field= m_sp->create_result_field(max_length, (const char*) name, t_arg); if (!res) res= Item_func::tmp_table_field(t_arg); if (!field) field= Item_func::tmp_table_field(t_arg); DBUG_RETURN(res); if (!field) my_message(ER_OUT_OF_RESOURCES, ER(ER_OUT_OF_RESOURCES), MYF(0)); DBUG_RETURN(field); } Loading