+++ /dev/null
---- 1.506/sql/sql_parse.cc 2005-10-13 13:12:07 +04:00
-+++ 1.507/sql/sql_parse.cc 2005-10-19 14:45:59 +04:00
-@@ -4068,6 +4068,19 @@
-
- DBUG_ASSERT(lex->sphead != 0);
-
-+ if (!lex->sphead->m_db.str || !lex->sphead->m_db.str[0])
-+ {
-+ if (! thd->db)
-+ {
-+ my_message(ER_NO_DB_ERROR, ER(ER_NO_DB_ERROR), MYF(0));
-+ delete lex->sphead;
-+ lex->sphead= 0;
-+ goto error;
-+ }
-+ lex->sphead->m_db.length= strlen(thd->db);
-+ lex->sphead->m_db.str= thd->db;
-+ }
-+
- if (check_access(thd, CREATE_PROC_ACL, lex->sphead->m_db.str, 0, 0, 0,
- is_schema_db(lex->sphead->m_db.str)))
- {
-@@ -4077,13 +4090,10 @@
- }
-
- if (end_active_trans(thd))
-- goto error;
--
-- if (!lex->sphead->m_db.str || !lex->sphead->m_db.str[0])
- {
-- lex->sphead->m_db.length= strlen(thd->db);
-- lex->sphead->m_db.str= strmake_root(thd->mem_root, thd->db,
-- lex->sphead->m_db.length);
-+ delete lex->sphead;
-+ lex->sphead= 0;
-+ goto error;
- }
-
- name= lex->sphead->name(&namelen);
-@@ -4110,11 +4120,23 @@
- goto error;
- }
-
-+ /*
-+ We need to copy name and db in order to use them for
-+ check_routine_access which is called after lex->sphead has
-+ been deleted.
-+ */
- name= thd->strdup(name);
-- db= thd->strmake(lex->sphead->m_db.str, lex->sphead->m_db.length);
-+ lex->sphead->m_db.str= db= thd->strmake(lex->sphead->m_db.str,
-+ lex->sphead->m_db.length);
- res= (result= lex->sphead->create(thd));
- if (result == SP_OK)
- {
-+ /*
-+ We must cleanup the unit and the lex here because
-+ sp_grant_privileges calls (indirectly) db_find_routine,
-+ which in turn may call yyparse with THD::lex.
-+ TODO: fix db_find_routine to use a temporary lex.
-+ */
- lex->unit.cleanup();
- delete lex->sphead;
- lex->sphead= 0;
-
---- 1.86/mysql-test/r/sp-error.result 2005-10-17 19:08:51 +04:00
-+++ 1.87/mysql-test/r/sp-error.result 2005-10-19 14:45:59 +04:00
-@@ -872,3 +872,14 @@
- foo4
- drop procedure bug13510_3|
- drop procedure bug13510_4|
-+create database mysqltest1;
-+use mysqltest1;
-+drop database mysqltest1;
-+create function f1() returns int return 1;
-+ERROR 3D000: No database selected
-+create procedure p1(out param1 int)
-+begin
-+select count(*) into param1 from t3;
-+end|
-+ERROR 3D000: No database selected
-+use test;
---- 1.90/mysql-test/t/sp-error.test 2005-10-17 19:08:54 +04:00
-+++ 1.91/mysql-test/t/sp-error.test 2005-10-19 14:45:59 +04:00
-@@ -1266,6 +1266,24 @@
- delimiter ;|
-
- #
-+# Bug#13514 "server crash when create a stored procedure before choose a
-+# database" and
-+# Bug#13587 "Server crash when SP is created without database
-+# selected"
-+#
-+create database mysqltest1;
-+use mysqltest1;
-+drop database mysqltest1;
-+--error ER_NO_DB_ERROR
-+create function f1() returns int return 1;
-+delimiter |;
-+--error ER_NO_DB_ERROR
-+create procedure p1(out param1 int)
-+begin
-+ select count(*) into param1 from t3;
-+end|
-+delimiter ;|
-+use test;
- # BUG#NNNN: New bug synopsis
- #
- #--disable_warnings
+++ /dev/null
-ChangeSet
- 1.2028 05/10/25 15:23:49 ingo@stripped +1 -0
- Bug#13707 - Server crash with INSERT DELAYED on MyISAM table
- Initialized 'ptr' for a newly instantiated varstring field.
- This is required by INSERT DELAYED.
-
- sql/field.cc
- 1.286 05/10/25 15:23:41 ingo@stripped +10 -3
- Bug#13707 - Server crash with INSERT DELAYED on MyISAM table
- Initialized 'ptr' for a newly instantiated varstring field.
- This is required by INSERT DELAYED.
-
---- 1.285/sql/field.cc 2005-10-13 23:04:47 +02:00
-+++ 1.286/sql/field.cc 2005-10-25 15:23:41 +02:00
-@@ -6201,9 +6201,16 @@
- This is done to ensure that ALTER TABLE will convert old VARCHAR fields
- to now VARCHAR fields.
- */
-- return new Field_varstring(field_length, maybe_null(),
-- field_name, new_table,
-- charset());
-+ Field *new_field= new Field_varstring(field_length, maybe_null(),
-+ field_name, new_table,
-+ charset());
-+ /*
-+ delayed_insert::get_local_table() needs a ptr copied from old table.
-+ This is what other new_field() methods do too. The above method of
-+ Field_varstring sets ptr to NULL.
-+ */
-+ new_field->ptr= ptr;
-+ return new_field;
- }
-
- /****************************************************************************