Commit 8ddb7e3e authored by Sergei Golubchik's avatar Sergei Golubchik

Bug#27167197 USING ? IN INSTALL PLUGIN QUERY ABORTS DEBUG, AND HANGS OPTIMIZED SERVER

check_valid_path() uses my_strcspn() that cannot handle invalid characters
properly. This is fixed by a big refactoring in 10.2 (MDEV-6353).

For 5.5, let's simply swap tests, because check_string_char_length()
rejects invalid characters just fine.
parent 5e8ab9b7
...@@ -277,5 +277,13 @@ UNUSABLE ...@@ -277,5 +277,13 @@ UNUSABLE
uninstall soname 'ha_example'; uninstall soname 'ha_example';
select plugin_name from information_schema.plugins where plugin_library like 'ha_example%'; select plugin_name from information_schema.plugins where plugin_library like 'ha_example%';
plugin_name plugin_name
set names utf8;
select convert('admin𝌆' using utf8);
convert('admin𝌆' using utf8)
admin
Warnings:
Warning 1300 Invalid utf8 character string: 'F09D8C'
install plugin foo soname 'admin𝌆';
ERROR HY000: No paths allowed for shared library
insert mysql.plugin values (); insert mysql.plugin values ();
delete from mysql.plugin where name = ''; delete from mysql.plugin where name = '';
...@@ -224,9 +224,18 @@ select plugin_name from information_schema.plugins where plugin_library like 'ha ...@@ -224,9 +224,18 @@ select plugin_name from information_schema.plugins where plugin_library like 'ha
uninstall soname 'ha_example'; uninstall soname 'ha_example';
select plugin_name from information_schema.plugins where plugin_library like 'ha_example%'; select plugin_name from information_schema.plugins where plugin_library like 'ha_example%';
#
#
#
set names utf8;
select convert('admin𝌆' using utf8);
--error ER_UDF_NO_PATHS
install plugin foo soname 'admin𝌆';
# #
# Bug#27302459: EMPTY VALUE IN MYSQL.PLUGIN TABLE CAUSES SERVER TO EXIT ON STARTUP # Bug#27302459: EMPTY VALUE IN MYSQL.PLUGIN TABLE CAUSES SERVER TO EXIT ON STARTUP
# #
insert mysql.plugin values (); insert mysql.plugin values ();
source include/restart_mysqld.inc; source include/restart_mysqld.inc;
delete from mysql.plugin where name = ''; delete from mysql.plugin where name = '';
...@@ -736,9 +736,9 @@ static st_plugin_dl *plugin_dl_add(const LEX_STRING *dl, int report) ...@@ -736,9 +736,9 @@ static st_plugin_dl *plugin_dl_add(const LEX_STRING *dl, int report)
This is done to ensure that only approved libraries from the This is done to ensure that only approved libraries from the
plugin directory are used (to make this even remotely secure). plugin directory are used (to make this even remotely secure).
*/ */
if (check_valid_path(dl->str, dl->length) || if (check_string_char_length((LEX_STRING *) dl, "", NAME_CHAR_LEN,
check_string_char_length((LEX_STRING *) dl, "", NAME_CHAR_LEN,
system_charset_info, 1) || system_charset_info, 1) ||
check_valid_path(dl->str, dl->length) ||
plugin_dir_len + dl->length + 1 >= FN_REFLEN) plugin_dir_len + dl->length + 1 >= FN_REFLEN)
{ {
report_error(report, ER_UDF_NO_PATHS); report_error(report, ER_UDF_NO_PATHS);
......
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