List:Commits« Previous MessageNext Message »
From:Mattias Jonsson Date:July 8 2010 12:37pm
Subject:bzr commit into mysql-5.1-bugteam branch (mattias.jonsson:3469) Bug#46086
View as plain text  
#At file:///Users/mattiasj/mysql-bzr/b46086-51-bt/ based on revid:georgi.kodinov@stripped

 3469 Mattias Jonsson	2010-07-08
      Bug#46086: crash when dropping a partitioned table
                 and the original engine is disabled
      
      Missing check that engine is available.
     @ mysql-test/include/not_blackhole.inc
        new include file
     @ mysql-test/r/partition_not_blackhole.result
        new result file
     @ mysql-test/std_data/parts/t1_blackhole.frm
        blackhole partitioned table .frm file:
        create table `t1` (`id` int primary key) engine=blackhole
        partition by key () partitions 1;
     @ mysql-test/std_data/parts/t1_blackhole.par
        .par file matching blackhole partitioned .frm
     @ mysql-test/t/partition_not_blackhole-master.opt
        new master-opt to disable blackhole if compiled in.
     @ mysql-test/t/partition_not_blackhole.test
        New test
     @ sql/ha_partition.cc
        Added check that engine is available.

    added:
      mysql-test/include/not_blackhole.inc
      mysql-test/r/partition_not_blackhole.result
      mysql-test/std_data/parts/t1_blackhole.frm
      mysql-test/std_data/parts/t1_blackhole.par
      mysql-test/t/partition_not_blackhole-master.opt
      mysql-test/t/partition_not_blackhole.test
    modified:
      sql/ha_partition.cc
=== added file 'mysql-test/include/not_blackhole.inc'
--- a/mysql-test/include/not_blackhole.inc	1970-01-01 00:00:00 +0000
+++ b/mysql-test/include/not_blackhole.inc	2010-07-08 12:36:55 +0000
@@ -0,0 +1,5 @@
+if (`SELECT count(*) FROM information_schema.engines WHERE
+     (support = 'YES' OR support = 'DEFAULT') AND
+     engine = 'blackhole'`){
+  skip Blackhole engine enabled;
+}

=== added file 'mysql-test/r/partition_not_blackhole.result'
--- a/mysql-test/r/partition_not_blackhole.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/r/partition_not_blackhole.result	2010-07-08 12:36:55 +0000
@@ -0,0 +1,16 @@
+DROP TABLE IF EXISTS t1;
+#
+# Bug#46086: crash when dropping a partitioned table and
+#            the original engine is disabled
+# Copy a .frm and .par file which was created with:
+# create table `t1` (`id` int primary key) engine=blackhole
+# partition by key () partitions 1;
+SHOW TABLES;
+Tables_in_test
+t1
+SHOW CREATE TABLE t1;
+ERROR HY000: Incorrect information in file: './test/t1.frm'
+DROP TABLE t1;
+ERROR 42S02: Unknown table 't1'
+t1.frm
+t1.par

=== added file 'mysql-test/std_data/parts/t1_blackhole.frm'
Binary files a/mysql-test/std_data/parts/t1_blackhole.frm	1970-01-01 00:00:00 +0000 and b/mysql-test/std_data/parts/t1_blackhole.frm	2010-07-08 12:36:55 +0000 differ

=== added file 'mysql-test/std_data/parts/t1_blackhole.par'
Binary files a/mysql-test/std_data/parts/t1_blackhole.par	1970-01-01 00:00:00 +0000 and b/mysql-test/std_data/parts/t1_blackhole.par	2010-07-08 12:36:55 +0000 differ

=== added file 'mysql-test/t/partition_not_blackhole-master.opt'
--- a/mysql-test/t/partition_not_blackhole-master.opt	1970-01-01 00:00:00 +0000
+++ b/mysql-test/t/partition_not_blackhole-master.opt	2010-07-08 12:36:55 +0000
@@ -0,0 +1 @@
+--loose-skip-blackhole

=== added file 'mysql-test/t/partition_not_blackhole.test'
--- a/mysql-test/t/partition_not_blackhole.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/t/partition_not_blackhole.test	2010-07-08 12:36:55 +0000
@@ -0,0 +1,25 @@
+--source include/have_partition.inc
+--source include/not_blackhole.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+--enable_warnings
+
+let $MYSQLD_DATADIR= `SELECT @@datadir`;
+
+--echo #
+--echo # Bug#46086: crash when dropping a partitioned table and
+--echo #            the original engine is disabled
+--echo # Copy a .frm and .par file which was created with:
+--echo # create table `t1` (`id` int primary key) engine=blackhole
+--echo # partition by key () partitions 1;
+--copy_file std_data/parts/t1_blackhole.frm $MYSQLD_DATADIR/test/t1.frm
+--copy_file std_data/parts/t1_blackhole.par $MYSQLD_DATADIR/test/t1.par
+SHOW TABLES;
+--error ER_NOT_FORM_FILE
+SHOW CREATE TABLE t1;
+--error ER_BAD_TABLE_ERROR
+DROP TABLE t1;
+--list_files $MYSQLD_DATADIR/test t1*
+--remove_file $MYSQLD_DATADIR/test/t1.frm
+--remove_file $MYSQLD_DATADIR/test/t1.par

=== modified file 'sql/ha_partition.cc'
--- a/sql/ha_partition.cc	2010-05-25 13:41:00 +0000
+++ b/sql/ha_partition.cc	2010-07-08 12:36:55 +0000
@@ -2403,9 +2403,14 @@ bool ha_partition::get_from_handler_file
   tot_partition_words= (m_tot_parts + 3) / 4;
   engine_array= (handlerton **) my_alloca(m_tot_parts * sizeof(handlerton*));
   for (i= 0; i < m_tot_parts; i++)
+  {
     engine_array[i]= ha_resolve_by_legacy_type(ha_thd(),
                                                (enum legacy_db_type)
-                                               *(uchar *) ((file_buffer) + 12 + i));
+                                               *(uchar *) ((file_buffer) +
+                                                           12 + i));
+    if (!engine_array[i])
+      goto err3;
+  }
   address_tot_name_len= file_buffer + 12 + 4 * tot_partition_words;
   tot_name_words= (uint4korr(address_tot_name_len) + 3) / 4;
   if (len_words != (tot_partition_words + tot_name_words + 4))


Attachment: [text/bzr-bundle] bzr/mattias.jonsson@oracle.com-20100708123655-3aasqrvm7v4m55yr.bundle
Thread
bzr commit into mysql-5.1-bugteam branch (mattias.jonsson:3469) Bug#46086Mattias Jonsson8 Jul