Skip to content

Commit

Permalink
Bug#27167197 USING ? IN INSTALL PLUGIN QUERY ABORTS DEBUG, AND HANGS …
Browse files Browse the repository at this point in the history
…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.
  • Loading branch information
vuvova committed Jul 24, 2019
1 parent 5e8ab9b commit 8ddb7e3
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 2 deletions.
8 changes: 8 additions & 0 deletions mysql-test/r/plugin.result
Original file line number Diff line number Diff line change
Expand Up @@ -277,5 +277,13 @@ UNUSABLE
uninstall soname 'ha_example';
select plugin_name from information_schema.plugins where plugin_library like 'ha_example%';
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 ();
delete from mysql.plugin where name = '';
9 changes: 9 additions & 0 deletions mysql-test/t/plugin.test
Original file line number Diff line number Diff line change
Expand Up @@ -224,9 +224,18 @@ select plugin_name from information_schema.plugins where plugin_library like 'ha
uninstall soname '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
#
insert mysql.plugin values ();
source include/restart_mysqld.inc;
delete from mysql.plugin where name = '';

4 changes: 2 additions & 2 deletions sql/sql_plugin.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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
plugin directory are used (to make this even remotely secure).
*/
if (check_valid_path(dl->str, dl->length) ||
check_string_char_length((LEX_STRING *) dl, "", NAME_CHAR_LEN,
if (check_string_char_length((LEX_STRING *) dl, "", NAME_CHAR_LEN,
system_charset_info, 1) ||
check_valid_path(dl->str, dl->length) ||
plugin_dir_len + dl->length + 1 >= FN_REFLEN)
{
report_error(report, ER_UDF_NO_PATHS);
Expand Down

0 comments on commit 8ddb7e3

Please sign in to comment.