mirror of
https://github.com/MariaDB/server.git
synced 2026-04-20 23:35:32 +02:00
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.
This commit is contained in:
parent
8e048579cd
commit
16ddd1824c
4 changed files with 16 additions and 1 deletions
10
mysql-test/suite/encryption/r/filekeys_emptyfile.result
Normal file
10
mysql-test/suite/encryption/r/filekeys_emptyfile.result
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
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.
|
||||
1
mysql-test/suite/encryption/t/filekeys_emptyfile.opt
Normal file
1
mysql-test/suite/encryption/t/filekeys_emptyfile.opt
Normal file
|
|
@ -0,0 +1 @@
|
|||
--loose-file-key-management-filename=$MYSQL_TEST_DIR/std_data/empty_file
|
||||
4
mysql-test/suite/encryption/t/filekeys_emptyfile.test
Normal file
4
mysql-test/suite/encryption/t/filekeys_emptyfile.test
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
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)
|
|||
keys->sort(sort_keys);
|
||||
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);
|
||||
return 1;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue