Commit f89e6c44 authored by Sergei Golubchik's avatar Sergei Golubchik

MDEV-5029 Crash in MariaDB 5.5.33 with .frm from older MariaDB release

Don't fail when an frm is inconsistent (legacy DB_TYPE_xxx code doesn't match the
engine name), use the engine name, ignore the legacy code.
parent 197bdbae
show create table t1; show create table t1;
ERROR 42000: Unknown storage engine 'InnoDB' ERROR 42000: Unknown storage engine 'InnoDB'
call mtr.add_suppression("t1.frm is inconsistent: engine typecode 43, engine name Aria");
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL,
`c` int(11) DEFAULT NULL,
KEY `a` (`a`),
KEY `b` (`b`)
) ENGINE=Aria DEFAULT CHARSET=latin1 PAGE_CHECKSUM=1
drop table t1;
...@@ -4,8 +4,17 @@ ...@@ -4,8 +4,17 @@
# a.k.a. fail to open an frm with indexes: # a.k.a. fail to open an frm with indexes:
let $datadir=`select @@datadir`; let $datadir=`select @@datadir`;
copy_file std_data/mdev5029.frm $datadir/test/t1.frm;
# normal innodb table (but innodb is disabled here)
copy_file std_data/mdev5029_1.frm $datadir/test/t1.frm;
--error ER_UNKNOWN_STORAGE_ENGINE --error ER_UNKNOWN_STORAGE_ENGINE
show create table t1; show create table t1;
remove_file $datadir/test/t1.frm; remove_file $datadir/test/t1.frm;
# Aria table, incorrect typecode
call mtr.add_suppression("t1.frm is inconsistent: engine typecode 43, engine name Aria");
copy_file std_data/mdev5029_2.frm $datadir/test/t1.frm;
copy_file std_data/mdev5029_2.MAI $datadir/test/t1.MAI;
copy_file std_data/mdev5029_2.MAD $datadir/test/t1.MAD;
show create table t1;
drop table t1;
...@@ -1093,7 +1093,10 @@ static int open_binary_frm(THD *thd, TABLE_SHARE *share, uchar *head, ...@@ -1093,7 +1093,10 @@ static int open_binary_frm(THD *thd, TABLE_SHARE *share, uchar *head,
plugin_data(tmp_plugin, handlerton *))) plugin_data(tmp_plugin, handlerton *)))
{ {
/* bad file, legacy_db_type did not match the name */ /* bad file, legacy_db_type did not match the name */
goto err; sql_print_warning("%s.frm is inconsistent: engine typecode %d, engine name %s (%d)",
share->normalized_path.str, legacy_db_type,
plugin_name(tmp_plugin)->str,
ha_legacy_type(plugin_data(tmp_plugin, handlerton *)));
} }
/* /*
tmp_plugin is locked with a local lock. tmp_plugin is locked with a local lock.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment