From 89d96dd48e3c9a52d8fdeed3cb31d7ffa4a83c36 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 7 Jun 2007 00:59:08 -0700 Subject: Fixed bug #28449: a crash may happen at some rare conditions when a temporary table has grown out of heap memory reserved for it and the remaining disk space is not big enough to store the table as a MyISAM table. The crash happens because the function create_myisam_from_heap does not handle safely the mem_root structure associated with the converted table in the case when an error has occurred. sql/sql_select.cc: Fixed bug #28449: a crash may happen at some rare conditions when a temporary table has grown out of heap memory reserved for it and the remaining disk space is not big enough to store the table as a MyISAM table. The crash happens because the function create_myisam_from_heap does not handle safely the mem_root structure associated with the converted table in the case when an error has occurred. As it's hard to create a sitiation that would throw an error a special code has been added that raises an error for a newly created test called error_simulation. mysql-test/r/error_simulation.result: New BitKeeper file ``mysql-test/r/error_simulation.result'' Added a test case for bug #28449. mysql-test/t/error_simulation-master.opt: New BitKeeper file ``mysql-test/t/error_simulation-master.opt'' mysql-test/t/error_simulation.test: New BitKeeper file ``mysql-test/t/error_simulation.test'' Added a test case for bug #28449. --- mysql-test/t/error_simulation.test | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 mysql-test/t/error_simulation.test (limited to 'mysql-test/t/error_simulation.test') diff --git a/mysql-test/t/error_simulation.test b/mysql-test/t/error_simulation.test new file mode 100644 index 00000000000..8c044224b8a --- /dev/null +++ b/mysql-test/t/error_simulation.test @@ -0,0 +1,29 @@ +-- source include/have_debug.inc + +# +# Bug #28499: crash for grouping query when tmp_table_size is too small +# + +DROP TABLE IF EXISTS t1; + +CREATE TABLE t1 ( + a varchar(32) character set utf8 collate utf8_bin NOT NULL, + b varchar(32) character set utf8 collate utf8_bin NOT NULL ) +ENGINE=MyISAM DEFAULT CHARSET=utf8; + +INSERT INTO t1 VALUES + ('AAAAAAAAAA','AAAAAAAAAA'), ('AAAAAAAAAB','AAAAAAAAAB '), + ('AAAAAAAAAB','AAAAAAAAAB'), ('AAAAAAAAAC','AAAAAAAAAC'), + ('AAAAAAAAAD','AAAAAAAAAD'), ('AAAAAAAAAE','AAAAAAAAAE'), + ('AAAAAAAAAF','AAAAAAAAAF'), ('AAAAAAAAAG','AAAAAAAAAG'), + ('AAAAAAAAAH','AAAAAAAAAH'), ('AAAAAAAAAI','AAAAAAAAAI'), + ('AAAAAAAAAJ','AAAAAAAAAJ'), ('AAAAAAAAAK','AAAAAAAAAK'); + +set tmp_table_size=1024; + +--error ER_DUP_KEY +SELECT MAX(a) FROM t1 GROUP BY a,b; + +set tmp_table_size=default; + +DROP TABLE t1; -- cgit v1.2.1