Bug #1495 SIGSEGV in Item_bool_func2::fix_length_and_dec()
Submitted: 7 Oct 2003 4:35 Modified: 14 Oct 2003 6:15
Reporter: Per-Erik Martin Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server Severity:S1 (Critical)
Version:5.0 OS:Any (All)
Assigned to: Bugs System CPU Architecture:Any

[7 Oct 2003 4:35] Per-Erik Martin
Description:
Calling the procedure "delivery" below crashes the server when executing
the instruction corresponding to "IF tmp_o_id > 0 THEN".

--
use test;

DROP TABLE IF EXISTS new_order;
CREATE TABLE new_order (
  no_o_id decimal(8,0) NOT NULL default '0',
  no_d_id decimal(2,0) NOT NULL default '0',
  no_w_id decimal(9,0) NOT NULL default '0',
  PRIMARY KEY  (no_w_id,no_d_id,no_o_id)
) TYPE=MyISAM CHARSET=latin1;

DROP PROCEDURE IF EXISTS new_order_init;

delimiter |;
CREATE PROCEDURE new_order_init()
BEGIN
  DELETE FROM new_order;
  INSERT INTO new_order VALUES (2102,1,1);
  INSERT INTO new_order VALUES (2103,1,1);
  INSERT INTO new_order VALUES (2104,1,1);
  INSERT INTO new_order VALUES (2105,1,1);
  INSERT INTO new_order VALUES (2106,1,1);
  INSERT INTO new_order VALUES (2107,1,1);
  INSERT INTO new_order VALUES (2108,1,1);
  INSERT INTO new_order VALUES (2109,1,1);
  INSERT INTO new_order VALUES (2110,1,1);
  INSERT INTO new_order VALUES (2111,1,1);
  INSERT INTO new_order VALUES (2112,1,1);
  INSERT INTO new_order VALUES (2101,2,1);
  INSERT INTO new_order VALUES (2102,2,1);
  INSERT INTO new_order VALUES (2103,2,1);
  INSERT INTO new_order VALUES (2104,2,1);
  INSERT INTO new_order VALUES (2105,2,1);
  INSERT INTO new_order VALUES (2106,2,1);
  INSERT INTO new_order VALUES (2107,2,1);
  INSERT INTO new_order VALUES (2108,2,1);
  INSERT INTO new_order VALUES (2109,2,1);
  INSERT INTO new_order VALUES (2110,2,1);
  INSERT INTO new_order VALUES (2111,2,1);
  INSERT INTO new_order VALUES (2112,2,1);
  INSERT INTO new_order VALUES (2101,3,1);
  INSERT INTO new_order VALUES (2102,3,1);
  INSERT INTO new_order VALUES (2103,3,1);
  INSERT INTO new_order VALUES (2104,3,1);
  INSERT INTO new_order VALUES (2105,3,1);
  INSERT INTO new_order VALUES (2106,3,1);
  INSERT INTO new_order VALUES (2107,3,1);
  INSERT INTO new_order VALUES (2108,3,1);
  INSERT INTO new_order VALUES (2109,3,1);
  INSERT INTO new_order VALUES (2110,3,1);
  INSERT INTO new_order VALUES (2111,3,1);
  INSERT INTO new_order VALUES (2112,3,1);
  INSERT INTO new_order VALUES (2101,4,1);
  INSERT INTO new_order VALUES (2102,4,1);
  INSERT INTO new_order VALUES (2103,4,1);
  INSERT INTO new_order VALUES (2104,4,1);
  INSERT INTO new_order VALUES (2105,4,1);
  INSERT INTO new_order VALUES (2106,4,1);
  INSERT INTO new_order VALUES (2107,4,1);
  INSERT INTO new_order VALUES (2108,4,1);
  INSERT INTO new_order VALUES (2109,4,1);
  INSERT INTO new_order VALUES (2110,4,1);
  INSERT INTO new_order VALUES (2111,4,1);
  INSERT INTO new_order VALUES (2112,4,1);
  INSERT INTO new_order VALUES (2101,5,1);
  INSERT INTO new_order VALUES (2102,5,1);
  INSERT INTO new_order VALUES (2103,5,1);
  INSERT INTO new_order VALUES (2104,5,1);
  INSERT INTO new_order VALUES (2105,5,1);
  INSERT INTO new_order VALUES (2106,5,1);
  INSERT INTO new_order VALUES (2107,5,1);
  INSERT INTO new_order VALUES (2108,5,1);
  INSERT INTO new_order VALUES (2109,5,1);
  INSERT INTO new_order VALUES (2110,5,1);
  INSERT INTO new_order VALUES (2111,5,1);
  INSERT INTO new_order VALUES (2112,5,1);
  INSERT INTO new_order VALUES (2101,6,1);
  INSERT INTO new_order VALUES (2102,6,1);
  INSERT INTO new_order VALUES (2103,6,1);
  INSERT INTO new_order VALUES (2104,6,1);
  INSERT INTO new_order VALUES (2105,6,1);
  INSERT INTO new_order VALUES (2106,6,1);
  INSERT INTO new_order VALUES (2107,6,1);
  INSERT INTO new_order VALUES (2108,6,1);
  INSERT INTO new_order VALUES (2109,6,1);
  INSERT INTO new_order VALUES (2110,6,1);
  INSERT INTO new_order VALUES (2111,6,1);
  INSERT INTO new_order VALUES (2112,6,1);
  INSERT INTO new_order VALUES (2101,7,1);
  INSERT INTO new_order VALUES (2102,7,1);
  INSERT INTO new_order VALUES (2103,7,1);
  INSERT INTO new_order VALUES (2104,7,1);
  INSERT INTO new_order VALUES (2105,7,1);
  INSERT INTO new_order VALUES (2106,7,1);
  INSERT INTO new_order VALUES (2107,7,1);
  INSERT INTO new_order VALUES (2108,7,1);
  INSERT INTO new_order VALUES (2109,7,1);
  INSERT INTO new_order VALUES (2110,7,1);
  INSERT INTO new_order VALUES (2111,7,1);
  INSERT INTO new_order VALUES (2112,7,1);
  INSERT INTO new_order VALUES (2101,8,1);
  INSERT INTO new_order VALUES (2102,8,1);
  INSERT INTO new_order VALUES (2103,8,1);
  INSERT INTO new_order VALUES (2104,8,1);
  INSERT INTO new_order VALUES (2105,8,1);
  INSERT INTO new_order VALUES (2106,8,1);
  INSERT INTO new_order VALUES (2107,8,1);
  INSERT INTO new_order VALUES (2108,8,1);
  INSERT INTO new_order VALUES (2109,8,1);
  INSERT INTO new_order VALUES (2110,8,1);
  INSERT INTO new_order VALUES (2111,8,1);
  INSERT INTO new_order VALUES (2112,8,1);
  INSERT INTO new_order VALUES (2101,9,1);
  INSERT INTO new_order VALUES (2102,9,1);
  INSERT INTO new_order VALUES (2103,9,1);
  INSERT INTO new_order VALUES (2104,9,1);
  INSERT INTO new_order VALUES (2105,9,1);
  INSERT INTO new_order VALUES (2106,9,1);
  INSERT INTO new_order VALUES (2107,9,1);
  INSERT INTO new_order VALUES (2108,9,1);
  INSERT INTO new_order VALUES (2109,9,1);
  INSERT INTO new_order VALUES (2110,9,1);
  INSERT INTO new_order VALUES (2111,9,1);
  INSERT INTO new_order VALUES (2112,9,1);
  INSERT INTO new_order VALUES (2101,10,1);
  INSERT INTO new_order VALUES (2102,10,1);
  INSERT INTO new_order VALUES (2103,10,1);
  INSERT INTO new_order VALUES (2104,10,1);
  INSERT INTO new_order VALUES (2105,10,1);
  INSERT INTO new_order VALUES (2106,10,1);
  INSERT INTO new_order VALUES (2107,10,1);
  INSERT INTO new_order VALUES (2108,10,1);
  INSERT INTO new_order VALUES (2109,10,1);
  INSERT INTO new_order VALUES (2110,10,1);
  INSERT INTO new_order VALUES (2111,10,1);
  INSERT INTO new_order VALUES (2112,10,1);
  INSERT INTO new_order VALUES (2101,1,2);
  INSERT INTO new_order VALUES (2102,1,2);
  INSERT INTO new_order VALUES (2103,1,2);
  INSERT INTO new_order VALUES (2104,1,2);
  INSERT INTO new_order VALUES (2105,1,2);
  INSERT INTO new_order VALUES (2106,1,2);
  INSERT INTO new_order VALUES (2107,1,2);
  INSERT INTO new_order VALUES (2108,1,2);
  INSERT INTO new_order VALUES (2109,1,2);
  INSERT INTO new_order VALUES (2110,1,2);
  INSERT INTO new_order VALUES (2111,1,2);
  INSERT INTO new_order VALUES (2112,1,2);
  INSERT INTO new_order VALUES (2101,2,2);
  INSERT INTO new_order VALUES (2102,2,2);
  INSERT INTO new_order VALUES (2103,2,2);
  INSERT INTO new_order VALUES (2104,2,2);
  INSERT INTO new_order VALUES (2105,2,2);
  INSERT INTO new_order VALUES (2106,2,2);
  INSERT INTO new_order VALUES (2107,2,2);
  INSERT INTO new_order VALUES (2108,2,2);
  INSERT INTO new_order VALUES (2109,2,2);
  INSERT INTO new_order VALUES (2110,2,2);
  INSERT INTO new_order VALUES (2111,2,2);
  INSERT INTO new_order VALUES (2112,2,2);
  INSERT INTO new_order VALUES (2101,3,2);
  INSERT INTO new_order VALUES (2102,3,2);
  INSERT INTO new_order VALUES (2103,3,2);
  INSERT INTO new_order VALUES (2104,3,2);
  INSERT INTO new_order VALUES (2105,3,2);
  INSERT INTO new_order VALUES (2106,3,2);
  INSERT INTO new_order VALUES (2107,3,2);
  INSERT INTO new_order VALUES (2108,3,2);
  INSERT INTO new_order VALUES (2109,3,2);
  INSERT INTO new_order VALUES (2110,3,2);
  INSERT INTO new_order VALUES (2111,3,2);
  INSERT INTO new_order VALUES (2112,3,2);
  INSERT INTO new_order VALUES (2101,4,2);
  INSERT INTO new_order VALUES (2102,4,2);
  INSERT INTO new_order VALUES (2103,4,2);
  INSERT INTO new_order VALUES (2104,4,2);
  INSERT INTO new_order VALUES (2105,4,2);
  INSERT INTO new_order VALUES (2106,4,2);
  INSERT INTO new_order VALUES (2107,4,2);
  INSERT INTO new_order VALUES (2108,4,2);
  INSERT INTO new_order VALUES (2109,4,2);
  INSERT INTO new_order VALUES (2110,4,2);
  INSERT INTO new_order VALUES (2111,4,2);
  INSERT INTO new_order VALUES (2112,4,2);
  INSERT INTO new_order VALUES (2101,5,2);
  INSERT INTO new_order VALUES (2102,5,2);
  INSERT INTO new_order VALUES (2103,5,2);
  INSERT INTO new_order VALUES (2104,5,2);
  INSERT INTO new_order VALUES (2105,5,2);
  INSERT INTO new_order VALUES (2106,5,2);
  INSERT INTO new_order VALUES (2107,5,2);
  INSERT INTO new_order VALUES (2108,5,2);
  INSERT INTO new_order VALUES (2109,5,2);
  INSERT INTO new_order VALUES (2110,5,2);
  INSERT INTO new_order VALUES (2111,5,2);
  INSERT INTO new_order VALUES (2112,5,2);
  INSERT INTO new_order VALUES (2101,6,2);
  INSERT INTO new_order VALUES (2102,6,2);
  INSERT INTO new_order VALUES (2103,6,2);
  INSERT INTO new_order VALUES (2104,6,2);
  INSERT INTO new_order VALUES (2105,6,2);
  INSERT INTO new_order VALUES (2106,6,2);
  INSERT INTO new_order VALUES (2107,6,2);
  INSERT INTO new_order VALUES (2108,6,2);
  INSERT INTO new_order VALUES (2109,6,2);
  INSERT INTO new_order VALUES (2110,6,2);
  INSERT INTO new_order VALUES (2111,6,2);
  INSERT INTO new_order VALUES (2112,6,2);
  INSERT INTO new_order VALUES (2101,7,2);
  INSERT INTO new_order VALUES (2102,7,2);
  INSERT INTO new_order VALUES (2103,7,2);
  INSERT INTO new_order VALUES (2104,7,2);
  INSERT INTO new_order VALUES (2105,7,2);
  INSERT INTO new_order VALUES (2106,7,2);
  INSERT INTO new_order VALUES (2107,7,2);
  INSERT INTO new_order VALUES (2108,7,2);
  INSERT INTO new_order VALUES (2109,7,2);
  INSERT INTO new_order VALUES (2110,7,2);
  INSERT INTO new_order VALUES (2111,7,2);
  INSERT INTO new_order VALUES (2112,7,2);
  INSERT INTO new_order VALUES (2101,8,2);
  INSERT INTO new_order VALUES (2102,8,2);
  INSERT INTO new_order VALUES (2103,8,2);
  INSERT INTO new_order VALUES (2104,8,2);
  INSERT INTO new_order VALUES (2105,8,2);
  INSERT INTO new_order VALUES (2106,8,2);
  INSERT INTO new_order VALUES (2107,8,2);
  INSERT INTO new_order VALUES (2108,8,2);
  INSERT INTO new_order VALUES (2109,8,2);
  INSERT INTO new_order VALUES (2110,8,2);
  INSERT INTO new_order VALUES (2111,8,2);
  INSERT INTO new_order VALUES (2112,8,2);
  INSERT INTO new_order VALUES (2101,9,2);
  INSERT INTO new_order VALUES (2102,9,2);
  INSERT INTO new_order VALUES (2103,9,2);
  INSERT INTO new_order VALUES (2104,9,2);
  INSERT INTO new_order VALUES (2105,9,2);
  INSERT INTO new_order VALUES (2106,9,2);
  INSERT INTO new_order VALUES (2107,9,2);
  INSERT INTO new_order VALUES (2108,9,2);
  INSERT INTO new_order VALUES (2109,9,2);
  INSERT INTO new_order VALUES (2110,9,2);
  INSERT INTO new_order VALUES (2111,9,2);
  INSERT INTO new_order VALUES (2112,9,2);
  INSERT INTO new_order VALUES (2101,10,2);
  INSERT INTO new_order VALUES (2102,10,2);
  INSERT INTO new_order VALUES (2103,10,2);
  INSERT INTO new_order VALUES (2104,10,2);
  INSERT INTO new_order VALUES (2105,10,2);
  INSERT INTO new_order VALUES (2106,10,2);
  INSERT INTO new_order VALUES (2107,10,2);
  INSERT INTO new_order VALUES (2108,10,2);
  INSERT INTO new_order VALUES (2109,10,2);
  INSERT INTO new_order VALUES (2110,10,2);
  INSERT INTO new_order VALUES (2111,10,2);
  INSERT INTO new_order VALUES (2112,10,2);
  INSERT INTO new_order VALUES (2101,1,3);
  INSERT INTO new_order VALUES (2102,1,3);
  INSERT INTO new_order VALUES (2103,1,3);
  INSERT INTO new_order VALUES (2104,1,3);
  INSERT INTO new_order VALUES (2105,1,3);
  INSERT INTO new_order VALUES (2106,1,3);
  INSERT INTO new_order VALUES (2107,1,3);
  INSERT INTO new_order VALUES (2108,1,3);
  INSERT INTO new_order VALUES (2109,1,3);
  INSERT INTO new_order VALUES (2110,1,3);
  INSERT INTO new_order VALUES (2111,1,3);
  INSERT INTO new_order VALUES (2112,1,3);
  INSERT INTO new_order VALUES (2101,2,3);
  INSERT INTO new_order VALUES (2102,2,3);
  INSERT INTO new_order VALUES (2103,2,3);
  INSERT INTO new_order VALUES (2104,2,3);
  INSERT INTO new_order VALUES (2105,2,3);
  INSERT INTO new_order VALUES (2106,2,3);
  INSERT INTO new_order VALUES (2107,2,3);
  INSERT INTO new_order VALUES (2108,2,3);
  INSERT INTO new_order VALUES (2109,2,3);
  INSERT INTO new_order VALUES (2110,2,3);
  INSERT INTO new_order VALUES (2111,2,3);
  INSERT INTO new_order VALUES (2112,2,3);
  INSERT INTO new_order VALUES (2101,3,3);
  INSERT INTO new_order VALUES (2102,3,3);
  INSERT INTO new_order VALUES (2103,3,3);
  INSERT INTO new_order VALUES (2104,3,3);
  INSERT INTO new_order VALUES (2105,3,3);
  INSERT INTO new_order VALUES (2106,3,3);
  INSERT INTO new_order VALUES (2107,3,3);
  INSERT INTO new_order VALUES (2108,3,3);
  INSERT INTO new_order VALUES (2109,3,3);
  INSERT INTO new_order VALUES (2110,3,3);
  INSERT INTO new_order VALUES (2111,3,3);
  INSERT INTO new_order VALUES (2112,3,3);
  INSERT INTO new_order VALUES (2101,4,3);
  INSERT INTO new_order VALUES (2102,4,3);
  INSERT INTO new_order VALUES (2103,4,3);
  INSERT INTO new_order VALUES (2104,4,3);
  INSERT INTO new_order VALUES (2105,4,3);
  INSERT INTO new_order VALUES (2106,4,3);
  INSERT INTO new_order VALUES (2107,4,3);
  INSERT INTO new_order VALUES (2108,4,3);
  INSERT INTO new_order VALUES (2109,4,3);
  INSERT INTO new_order VALUES (2110,4,3);
  INSERT INTO new_order VALUES (2111,4,3);
  INSERT INTO new_order VALUES (2112,4,3);
  INSERT INTO new_order VALUES (2101,5,3);
  INSERT INTO new_order VALUES (2102,5,3);
  INSERT INTO new_order VALUES (2103,5,3);
  INSERT INTO new_order VALUES (2104,5,3);
  INSERT INTO new_order VALUES (2105,5,3);
  INSERT INTO new_order VALUES (2106,5,3);
  INSERT INTO new_order VALUES (2107,5,3);
  INSERT INTO new_order VALUES (2108,5,3);
  INSERT INTO new_order VALUES (2109,5,3);
  INSERT INTO new_order VALUES (2110,5,3);
  INSERT INTO new_order VALUES (2111,5,3);
  INSERT INTO new_order VALUES (2112,5,3);
  INSERT INTO new_order VALUES (2101,6,3);
  INSERT INTO new_order VALUES (2102,6,3);
  INSERT INTO new_order VALUES (2103,6,3);
  INSERT INTO new_order VALUES (2104,6,3);
  INSERT INTO new_order VALUES (2105,6,3);
  INSERT INTO new_order VALUES (2106,6,3);
  INSERT INTO new_order VALUES (2107,6,3);
  INSERT INTO new_order VALUES (2108,6,3);
  INSERT INTO new_order VALUES (2109,6,3);
  INSERT INTO new_order VALUES (2110,6,3);
  INSERT INTO new_order VALUES (2111,6,3);
  INSERT INTO new_order VALUES (2112,6,3);
  INSERT INTO new_order VALUES (2101,7,3);
  INSERT INTO new_order VALUES (2102,7,3);
  INSERT INTO new_order VALUES (2103,7,3);
  INSERT INTO new_order VALUES (2104,7,3);
  INSERT INTO new_order VALUES (2105,7,3);
  INSERT INTO new_order VALUES (2106,7,3);
  INSERT INTO new_order VALUES (2107,7,3);
  INSERT INTO new_order VALUES (2108,7,3);
  INSERT INTO new_order VALUES (2109,7,3);
  INSERT INTO new_order VALUES (2110,7,3);
  INSERT INTO new_order VALUES (2111,7,3);
  INSERT INTO new_order VALUES (2112,7,3);
  INSERT INTO new_order VALUES (2101,8,3);
  INSERT INTO new_order VALUES (2102,8,3);
  INSERT INTO new_order VALUES (2103,8,3);
  INSERT INTO new_order VALUES (2104,8,3);
  INSERT INTO new_order VALUES (2105,8,3);
  INSERT INTO new_order VALUES (2106,8,3);
  INSERT INTO new_order VALUES (2107,8,3);
  INSERT INTO new_order VALUES (2108,8,3);
  INSERT INTO new_order VALUES (2109,8,3);
  INSERT INTO new_order VALUES (2110,8,3);
  INSERT INTO new_order VALUES (2111,8,3);
  INSERT INTO new_order VALUES (2112,8,3);
  INSERT INTO new_order VALUES (2101,9,3);
  INSERT INTO new_order VALUES (2102,9,3);
  INSERT INTO new_order VALUES (2103,9,3);
  INSERT INTO new_order VALUES (2104,9,3);
  INSERT INTO new_order VALUES (2105,9,3);
  INSERT INTO new_order VALUES (2106,9,3);
  INSERT INTO new_order VALUES (2107,9,3);
  INSERT INTO new_order VALUES (2108,9,3);
  INSERT INTO new_order VALUES (2109,9,3);
  INSERT INTO new_order VALUES (2110,9,3);
  INSERT INTO new_order VALUES (2111,9,3);
  INSERT INTO new_order VALUES (2112,9,3);
  INSERT INTO new_order VALUES (2101,10,3);
  INSERT INTO new_order VALUES (2102,10,3);
  INSERT INTO new_order VALUES (2103,10,3);
  INSERT INTO new_order VALUES (2104,10,3);
  INSERT INTO new_order VALUES (2105,10,3);
  INSERT INTO new_order VALUES (2106,10,3);
  INSERT INTO new_order VALUES (2107,10,3);
  INSERT INTO new_order VALUES (2108,10,3);
  INSERT INTO new_order VALUES (2109,10,3);
  INSERT INTO new_order VALUES (2110,10,3);
  INSERT INTO new_order VALUES (2111,10,3);
  INSERT INTO new_order VALUES (2112,10,3);
END|
delimiter ;|

DROP TABLE IF EXISTS result;
CREATE TABLE result (
  f1 int(11) default NULL
) TYPE=MyISAM CHARSET=latin1;

drop procedure if exists delivery;

delimiter |;
CREATE PROCEDURE delivery(in_w_id INT, in_o_carrier_id INT)
BEGIN

  DECLARE 	tmp_d_id INT;
  DECLARE 	tmp_o_id INT;

        set tmp_d_id = 1;

        while tmp_d_id <= 10 do 
        begin 
          SELECT no_o_id
	  INTO tmp_o_id
	  FROM new_order
	  WHERE no_w_id = in_w_id AND no_d_id = tmp_d_id limit 1;

          insert into test.result values (1);

          IF tmp_o_id > 0 THEN
                insert into test.result values (2);
                DELETE FROM new_order WHERE no_o_id = tmp_o_id AND no_w_id = in_w_id AND no_d_id = tmp_d_id;
          end if;

          set tmp_d_id = tmp_d_id + 1;
        end;
        end while;
END|
delimiter ;|

How to repeat:
Source the above script, then:

mysql> call new_order_init();
Query OK, 0 rows affected (0.10 sec)

mysql> call delivery(1,1);
[14 Oct 2003 6:15] Per-Erik Martin
Thank you for your bug report. This issue has been committed to our
source repository of that product and will be incorporated into the
next release.

If necessary, you can access the source repository and build the latest
available version, including the bugfix, yourself. More information 
about accessing the source trees is available at
    http://www.mysql.com/doc/en/Installing_source_tree.html