Commit c9ff25f5 authored by Sergei Golubchik's avatar Sergei Golubchik

MDEV-3985 crash: uninstall soname 'a'

parent a128c50a
...@@ -69,6 +69,8 @@ UNINSTALL PLUGIN EXAMPLE; ...@@ -69,6 +69,8 @@ UNINSTALL PLUGIN EXAMPLE;
ERROR 42000: PLUGIN EXAMPLE does not exist ERROR 42000: PLUGIN EXAMPLE does not exist
UNINSTALL PLUGIN non_exist; UNINSTALL PLUGIN non_exist;
ERROR 42000: PLUGIN non_exist does not exist ERROR 42000: PLUGIN non_exist does not exist
UNINSTALL SONAME 'non_exist';
ERROR 42000: SONAME non_exist.so does not exist
# #
# Bug#32034: check_func_enum() does not check correct values but set it # Bug#32034: check_func_enum() does not check correct values but set it
# to impossible int val # to impossible int val
......
...@@ -4,14 +4,14 @@ ...@@ -4,14 +4,14 @@
CREATE TABLE t1(a int) ENGINE=EXAMPLE; CREATE TABLE t1(a int) ENGINE=EXAMPLE;
DROP TABLE t1; DROP TABLE t1;
eval INSTALL PLUGIN example SONAME 'ha_example'; INSTALL PLUGIN example SONAME 'ha_example';
--replace_regex /\.dll/.so/ --replace_regex /\.dll/.so/
--error 1125 --error 1125
eval INSTALL PLUGIN EXAMPLE SONAME 'ha_example'; INSTALL PLUGIN EXAMPLE SONAME 'ha_example';
UNINSTALL PLUGIN example; UNINSTALL PLUGIN example;
eval INSTALL SONAME 'ha_example'; INSTALL SONAME 'ha_example';
--replace_column 5 # --replace_column 5 #
--replace_regex /\.dll/.so/ --replace_regex /\.dll/.so/
--query_vertical select * from information_schema.plugins where plugin_library like 'ha_example%' --query_vertical select * from information_schema.plugins where plugin_library like 'ha_example%'
...@@ -28,7 +28,7 @@ set global example_enum_var= e1; ...@@ -28,7 +28,7 @@ set global example_enum_var= e1;
show status like 'example%'; show status like 'example%';
show variables like 'example%'; show variables like 'example%';
eval UNINSTALL SONAME 'ha_example'; UNINSTALL SONAME 'ha_example';
--replace_column 5 # --replace_column 5 #
--replace_regex /\.dll/.so/ --replace_regex /\.dll/.so/
--query_vertical select * from information_schema.plugins where plugin_library like 'ha_example%' --query_vertical select * from information_schema.plugins where plugin_library like 'ha_example%'
...@@ -41,12 +41,18 @@ UNINSTALL PLUGIN EXAMPLE; ...@@ -41,12 +41,18 @@ UNINSTALL PLUGIN EXAMPLE;
--error 1305 --error 1305
UNINSTALL PLUGIN non_exist; UNINSTALL PLUGIN non_exist;
#
# MDEV-3985 crash: uninstall soname 'a'
#
--replace_regex /\.dll/.so/
--error 1305
UNINSTALL SONAME 'non_exist';
--echo # --echo #
--echo # Bug#32034: check_func_enum() does not check correct values but set it --echo # Bug#32034: check_func_enum() does not check correct values but set it
--echo # to impossible int val --echo # to impossible int val
--echo # --echo #
eval INSTALL PLUGIN example SONAME 'ha_example'; INSTALL PLUGIN example SONAME 'ha_example';
SET GLOBAL example_enum_var= e1; SET GLOBAL example_enum_var= e1;
SET GLOBAL example_enum_var= e2; SET GLOBAL example_enum_var= e2;
...@@ -60,7 +66,7 @@ UNINSTALL PLUGIN example; ...@@ -60,7 +66,7 @@ UNINSTALL PLUGIN example;
# #
# Bug #32757 hang with sql_mode set when setting some global variables # Bug #32757 hang with sql_mode set when setting some global variables
# #
eval INSTALL PLUGIN example SONAME 'ha_example'; INSTALL PLUGIN example SONAME 'ha_example';
select @@session.sql_mode into @old_sql_mode; select @@session.sql_mode into @old_sql_mode;
......
/* /*
Copyright (c) 2005, 2012, Oracle and/or its affiliates. Copyright (c) 2005, 2012, Oracle and/or its affiliates.
Copyright (c) 2010, 2011, Monty Program Ab Copyright (c) 2010, 2013, Monty Program Ab
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
...@@ -2260,13 +2260,21 @@ bool mysql_uninstall_plugin(THD *thd, const LEX_STRING *name, ...@@ -2260,13 +2260,21 @@ bool mysql_uninstall_plugin(THD *thd, const LEX_STRING *name,
{ {
fix_dl_name(thd->mem_root, &dl); fix_dl_name(thd->mem_root, &dl);
st_plugin_dl *plugin_dl= plugin_dl_find(&dl); st_plugin_dl *plugin_dl= plugin_dl_find(&dl);
struct st_maria_plugin *plugin; if (plugin_dl)
for (plugin= plugin_dl->plugins; plugin->info; plugin++) {
for (struct st_maria_plugin *plugin= plugin_dl->plugins;
plugin->info; plugin++)
{ {
LEX_STRING str= { const_cast<char*>(plugin->name), strlen(plugin->name) }; LEX_STRING str= { const_cast<char*>(plugin->name), strlen(plugin->name) };
error|= do_uninstall(thd, table, &str); error|= do_uninstall(thd, table, &str);
} }
} }
else
{
my_error(ER_SP_DOES_NOT_EXIST, MYF(0), "SONAME", dl.str);
error= true;
}
}
reap_plugins(); reap_plugins();
mysql_mutex_unlock(&LOCK_plugin); mysql_mutex_unlock(&LOCK_plugin);
......
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