Commit 16ddd182 authored by Vicențiu Ciorbaru's avatar Vicențiu Ciorbaru

MDEV-9613: keyfile without any keys crashes mysqld on loading file_key_management plugin

Code was assuming that the keys file would contain at least one valid
key. This caused a Dynamic_array::at(0) call that lead to the crash.
parent 8e048579
call mtr.add_suppression("System key id 1 is missing at");
call mtr.add_suppression("Plugin 'file_key_management' init function returned error");
call mtr.add_suppression("Plugin 'file_key_management' registration.*failed");
FOUND /System key id 1 is missing at/ in mysqld.1.err
create table t1(c1 bigint not null, b char(200)) engine=innodb encrypted=yes encryption_key_id=1;
ERROR HY000: Can't create table `test`.`t1` (errno: 140 "Wrong create options")
select plugin_status from information_schema.plugins
where plugin_name = 'file_key_management';
plugin_status
# Test checks if opening an empty filekeys does not crash the server.
--loose-file-key-management-filename=$MYSQL_TEST_DIR/std_data/empty_file
let SEARCH_PATTERN=System key id 1 is missing at;
source filekeys_badtest.inc;
--echo # Test checks if opening an empty filekeys does not crash the server.
...@@ -220,7 +220,7 @@ bool Parser::parse_file(Dynamic_array<keyentry> *keys, const char *secret) ...@@ -220,7 +220,7 @@ bool Parser::parse_file(Dynamic_array<keyentry> *keys, const char *secret)
keys->sort(sort_keys); keys->sort(sort_keys);
my_free(buffer); my_free(buffer);
if (keys->at(0).id != 1) if (keys->elements() == 0 || keys->at(0).id != 1)
{ {
report_error("System key id 1 is missing", 0); report_error("System key id 1 is missing", 0);
return 1; return 1;
......
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