Re: Crash Mysql 5.0 - Stored Procedure

Sinisa Milivojevic <[email protected]>
Newsgroups gmane.comp.db.mysql.bugs
Message-ID <[email protected]>
Szymon Okraska writes:
> Hi
> 
> Sorry for my english :(
> 
> Example of stored procedure:
> 
> 
> Reading table information for completion of table and column names
> You can turn off this feature to get a quicker startup with -A
> 
> Welcome to the MySQL monitor.  Commands end with ; or \g.
> Your MySQL connection id is 1 to server version: 5.0.0-alpha-standard
> 
> Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
> 
> mysql> DELIMITER |
> mysql> DROP PROCEDURE IF EXISTS  crash|
> Query OK, 0 rows affected (0.00 sec)
> 
> mysql> CREATE PROCEDURE crash()
>     -> BEGIN
>     ->    DROP TABLE IF EXISTS test.c1;
>     ->    CREATE TABLE test.c1 (id INT DEFAULT '0' NOT NULL);
>     ->    INSERT INTO test.c1 select 12;
>     -> END|
> Query OK, 0 rows affected (0.00 sec)
> 
> mysql> DELIMITER ;
> mysql> call crash();
> Query OK, 0 rows affected (0.01 sec)
> 
> mysql> call crash();
> ERROR 2013 (HY000): Lost connection to MySQL server during query
> mysql>
> 
> It's happend on debian linux and windows xp;
> 
> Any sugestion ?
> If I use select in insert it crash server.
> 
> 
> Szymon Okraska
> 
> -- 
> MySQL Bugs Mailing List
> For list archives: http://lists.mysql.com/bugs
> To unsubscribe:    http://lists.mysql.com/[email protected]
> 

Hi!

Thank you for your fine report.

It truly crashes MySQL 5.0.

This is such a nice report, that I have fixed it quite fast.

Patch is already proposed that shuold fix a problem.

This is a proposed, and not yet final, patch:
===== sql/sp_head.cc 1.64 vs edited =====
*** /tmp/sp_head.cc-1.64-4485   Mon Jan 26 16:17:32 2004
--- edited/sql/sp_head.cc       Mon Feb  2 19:50:42 2004
***************
*** 853,868 ****
      TABLE_LIST *tabs;
  
      // We have closed all tables, get rid of pointers to them
      for (tabs=(TABLE_LIST *)sl->table_list.first ;
         tabs ;
         tabs= tabs->next)
      {
        tabs->table= NULL;
-     }
-     if (lex->sql_command == SQLCOM_CREATE_TABLE ||
-       lex->sql_command == SQLCOM_INSERT_SELECT)
-     {                         // Restore sl->table_list.first
-       sl->table_list.first= sl->table_list_first_copy;
      }
      for (ORDER *order= (ORDER *)sl->order_list.first ;
         order ;
--- 853,868 ----
      TABLE_LIST *tabs;
  
      // We have closed all tables, get rid of pointers to them
+     if (lex->sql_command == SQLCOM_CREATE_TABLE ||
+       lex->sql_command == SQLCOM_INSERT_SELECT)
+     {                         // Restore sl->table_list.first
+       sl->table_list.first= sl->table_list_first_copy;
+     }
      for (tabs=(TABLE_LIST *)sl->table_list.first ;
         tabs ;
         tabs= tabs->next)
      {
        tabs->table= NULL;
      }
      for (ORDER *order= (ORDER *)sl->order_list.first ;
         order ;



-- 

Sincerely,

-- 
For technical support contracts, go to https://order.mysql.com/?ref=msmi
   __  ___     ___ ____  __
  /  |/  /_ __/ __/ __ \/ /    Mr. Sinisa Milivojevic <[email protected]>
 / /|_/ / // /\ \/ /_/ / /__   MySQL AB
/_/  /_/\_, /___/\___\_\___/   Full time Developer and Support Coordinator
       <___/   www.mysql.com   Larnaca, Cyprus

Want to swim with the dolphins? (April 14-16, 2004)
http://www.mysql.com/uc2004/


-- 
MySQL Bugs Mailing List
For list archives: http://lists.mysql.com/bugs
To unsubscribe:    http://lists.mysql.com/[email protected]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.