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.
This commit is contained in:
parent
d9e7c4efb6
commit
b7ad17d06a
5
mysql-test/include/not_blackhole.inc
Normal file
5
mysql-test/include/not_blackhole.inc
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
if (`SELECT count(*) FROM information_schema.engines WHERE
|
||||||
|
(support = 'YES' OR support = 'DEFAULT') AND
|
||||||
|
engine = 'blackhole'`){
|
||||||
|
skip Blackhole engine enabled;
|
||||||
|
}
|
16
mysql-test/r/partition_not_blackhole.result
Normal file
16
mysql-test/r/partition_not_blackhole.result
Normal file
@ -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
|
BIN
mysql-test/std_data/parts/t1_blackhole.frm
Normal file
BIN
mysql-test/std_data/parts/t1_blackhole.frm
Normal file
Binary file not shown.
BIN
mysql-test/std_data/parts/t1_blackhole.par
Normal file
BIN
mysql-test/std_data/parts/t1_blackhole.par
Normal file
Binary file not shown.
1
mysql-test/t/partition_not_blackhole-master.opt
Normal file
1
mysql-test/t/partition_not_blackhole-master.opt
Normal file
@ -0,0 +1 @@
|
|||||||
|
--loose-skip-blackhole
|
25
mysql-test/t/partition_not_blackhole.test
Normal file
25
mysql-test/t/partition_not_blackhole.test
Normal file
@ -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
|
@ -2403,9 +2403,14 @@ bool ha_partition::get_from_handler_file(const char *name, MEM_ROOT *mem_root)
|
|||||||
tot_partition_words= (m_tot_parts + 3) / 4;
|
tot_partition_words= (m_tot_parts + 3) / 4;
|
||||||
engine_array= (handlerton **) my_alloca(m_tot_parts * sizeof(handlerton*));
|
engine_array= (handlerton **) my_alloca(m_tot_parts * sizeof(handlerton*));
|
||||||
for (i= 0; i < m_tot_parts; i++)
|
for (i= 0; i < m_tot_parts; i++)
|
||||||
|
{
|
||||||
engine_array[i]= ha_resolve_by_legacy_type(ha_thd(),
|
engine_array[i]= ha_resolve_by_legacy_type(ha_thd(),
|
||||||
(enum legacy_db_type)
|
(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;
|
address_tot_name_len= file_buffer + 12 + 4 * tot_partition_words;
|
||||||
tot_name_words= (uint4korr(address_tot_name_len) + 3) / 4;
|
tot_name_words= (uint4korr(address_tot_name_len) + 3) / 4;
|
||||||
if (len_words != (tot_partition_words + tot_name_words + 4))
|
if (len_words != (tot_partition_words + tot_name_words + 4))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user