Commit cd36bc01 authored by Sujatha's avatar Sujatha

MDEV-23534: SIGSEGV in sf_malloc_usable_size/my_free on SET GLOBAL REPLICATE_DO_TABLE

Backporting fixes for:

MDEV-22317: SIGSEGV in my_free/delete_dynamic in optimized builds (ARIA)
  Backported following commits from: 10.5.3
  commit 77e1b0c3 -- Post push fix.
  commit 2e6b21be

MDEV-22059: MSAN report at replicate_ignore_table_grant
  Backported following  commits from: 10.5.4
  commit 840fb495
parent 94e9dc95
...@@ -5,6 +5,8 @@ ERROR HY000: This operation cannot be performed as you have a running slave ''; ...@@ -5,6 +5,8 @@ ERROR HY000: This operation cannot be performed as you have a running slave '';
SET @@GLOBAL.replicate_ignore_table="test.t4,test.t5,test.t6"; SET @@GLOBAL.replicate_ignore_table="test.t4,test.t5,test.t6";
ERROR HY000: This operation cannot be performed as you have a running slave ''; run STOP SLAVE '' first ERROR HY000: This operation cannot be performed as you have a running slave ''; run STOP SLAVE '' first
include/stop_slave.inc include/stop_slave.inc
SET @@GLOBAL.replicate_do_table="";
SET @@GLOBAL.replicate_ignore_table="";
SET @@GLOBAL.replicate_do_table="test.t1,test.t2,test.t3"; SET @@GLOBAL.replicate_do_table="test.t1,test.t2,test.t3";
SET @@GLOBAL.replicate_ignore_table="test.t4,test.t5,test.t6"; SET @@GLOBAL.replicate_ignore_table="test.t4,test.t5,test.t6";
include/start_slave.inc include/start_slave.inc
......
...@@ -5,6 +5,8 @@ ERROR HY000: This operation cannot be performed as you have a running slave ''; ...@@ -5,6 +5,8 @@ ERROR HY000: This operation cannot be performed as you have a running slave '';
SET @@GLOBAL.replicate_wild_ignore_table="test.b%"; SET @@GLOBAL.replicate_wild_ignore_table="test.b%";
ERROR HY000: This operation cannot be performed as you have a running slave ''; run STOP SLAVE '' first ERROR HY000: This operation cannot be performed as you have a running slave ''; run STOP SLAVE '' first
include/stop_slave.inc include/stop_slave.inc
SET @@GLOBAL.replicate_wild_do_table="";
SET @@GLOBAL.replicate_wild_ignore_table="";
SET @@GLOBAL.replicate_wild_do_table="test.a%"; SET @@GLOBAL.replicate_wild_do_table="test.a%";
SET @@GLOBAL.replicate_wild_ignore_table="test.b%"; SET @@GLOBAL.replicate_wild_ignore_table="test.b%";
include/start_slave.inc include/start_slave.inc
......
...@@ -51,6 +51,8 @@ SET @@GLOBAL.replicate_ignore_table="test.t4,test.t5,test.t6"; ...@@ -51,6 +51,8 @@ SET @@GLOBAL.replicate_ignore_table="test.t4,test.t5,test.t6";
connection slave; connection slave;
source include/stop_slave.inc; source include/stop_slave.inc;
SET @@GLOBAL.replicate_do_table="";
SET @@GLOBAL.replicate_ignore_table="";
SET @@GLOBAL.replicate_do_table="test.t1,test.t2,test.t3"; SET @@GLOBAL.replicate_do_table="test.t1,test.t2,test.t3";
SET @@GLOBAL.replicate_ignore_table="test.t4,test.t5,test.t6"; SET @@GLOBAL.replicate_ignore_table="test.t4,test.t5,test.t6";
source include/start_slave.inc; source include/start_slave.inc;
......
...@@ -13,6 +13,8 @@ SET @@GLOBAL.replicate_wild_ignore_table="test.b%"; ...@@ -13,6 +13,8 @@ SET @@GLOBAL.replicate_wild_ignore_table="test.b%";
connection slave; connection slave;
source include/stop_slave.inc; source include/stop_slave.inc;
SET @@GLOBAL.replicate_wild_do_table="";
SET @@GLOBAL.replicate_wild_ignore_table="";
SET @@GLOBAL.replicate_wild_do_table="test.a%"; SET @@GLOBAL.replicate_wild_do_table="test.a%";
SET @@GLOBAL.replicate_wild_ignore_table="test.b%"; SET @@GLOBAL.replicate_wild_ignore_table="test.b%";
source include/start_slave.inc; source include/start_slave.inc;
......
...@@ -349,14 +349,20 @@ Rpl_filter::set_do_table(const char* table_spec) ...@@ -349,14 +349,20 @@ Rpl_filter::set_do_table(const char* table_spec)
int status; int status;
if (do_table_inited) if (do_table_inited)
my_hash_reset(&do_table); {
my_hash_free(&do_table);
do_table_inited= 0;
}
status= parse_filter_rule(table_spec, &Rpl_filter::add_do_table); status= parse_filter_rule(table_spec, &Rpl_filter::add_do_table);
if (!do_table.records) if (do_table_inited && status)
{ {
my_hash_free(&do_table); if (!do_table.records)
do_table_inited= 0; {
my_hash_free(&do_table);
do_table_inited= 0;
}
} }
return status; return status;
...@@ -369,14 +375,20 @@ Rpl_filter::set_ignore_table(const char* table_spec) ...@@ -369,14 +375,20 @@ Rpl_filter::set_ignore_table(const char* table_spec)
int status; int status;
if (ignore_table_inited) if (ignore_table_inited)
my_hash_reset(&ignore_table); {
my_hash_free(&ignore_table);
ignore_table_inited= 0;
}
status= parse_filter_rule(table_spec, &Rpl_filter::add_ignore_table); status= parse_filter_rule(table_spec, &Rpl_filter::add_ignore_table);
if (!ignore_table.records) if (ignore_table_inited && status)
{ {
my_hash_free(&ignore_table); if (!ignore_table.records)
ignore_table_inited= 0; {
my_hash_free(&ignore_table);
ignore_table_inited= 0;
}
} }
return status; return status;
...@@ -411,14 +423,20 @@ Rpl_filter::set_wild_do_table(const char* table_spec) ...@@ -411,14 +423,20 @@ Rpl_filter::set_wild_do_table(const char* table_spec)
int status; int status;
if (wild_do_table_inited) if (wild_do_table_inited)
{
free_string_array(&wild_do_table); free_string_array(&wild_do_table);
wild_do_table_inited= 0;
}
status= parse_filter_rule(table_spec, &Rpl_filter::add_wild_do_table); status= parse_filter_rule(table_spec, &Rpl_filter::add_wild_do_table);
if (!wild_do_table.elements) if (wild_do_table_inited && status)
{ {
delete_dynamic(&wild_do_table); if (!wild_do_table.elements)
wild_do_table_inited= 0; {
delete_dynamic(&wild_do_table);
wild_do_table_inited= 0;
}
} }
return status; return status;
...@@ -431,14 +449,20 @@ Rpl_filter::set_wild_ignore_table(const char* table_spec) ...@@ -431,14 +449,20 @@ Rpl_filter::set_wild_ignore_table(const char* table_spec)
int status; int status;
if (wild_ignore_table_inited) if (wild_ignore_table_inited)
{
free_string_array(&wild_ignore_table); free_string_array(&wild_ignore_table);
wild_ignore_table_inited= 0;
}
status= parse_filter_rule(table_spec, &Rpl_filter::add_wild_ignore_table); status= parse_filter_rule(table_spec, &Rpl_filter::add_wild_ignore_table);
if (!wild_ignore_table.elements) if (wild_ignore_table_inited && status)
{ {
delete_dynamic(&wild_ignore_table); if (!wild_ignore_table.elements)
wild_ignore_table_inited= 0; {
delete_dynamic(&wild_ignore_table);
wild_ignore_table_inited= 0;
}
} }
return status; return status;
......
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