1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-29 05:21:33 +03:00

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.
This commit is contained in:
Sergei Golubchik
2019-07-24 13:14:03 +02:00
parent 5e8ab9b7af
commit 8ddb7e3eb7
3 changed files with 19 additions and 2 deletions

View File

@ -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 = '';

View File

@ -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 = '';

View File

@ -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);