Commit ee0738ed authored by Luis Soares's avatar Luis Soares

BUG#53893: RBR: nullable unique key can lead to out-of-sync slave

  
Post-push fix.
  
There was a valgrind issue on the loop that checks whether there
are NULL fields in the UNIQUE KEY or not. In detail, for the last 
iteration the server may read out of the key_part array boundaries,
making valgrind to output warnings.

We fix this by correcting the loop, ie, moving the part that reads
from the key_part to be inside the loop statement block. This way
the assignment is protected by the loop condition.
parent 0ade82fe
...@@ -9029,14 +9029,11 @@ int Rows_log_event::find_row(const Relay_log_info *rli) ...@@ -9029,14 +9029,11 @@ int Rows_log_event::find_row(const Relay_log_info *rli)
BI image that is null and part of UNNI. BI image that is null and part of UNNI.
*/ */
bool null_found= FALSE; bool null_found= FALSE;
for (uint i=0; i < keyinfo->key_parts && !null_found; i++)
for (uint i=0, fieldnr= keyinfo->key_part[i].fieldnr - 1 ;
(i < keyinfo->key_parts) && !null_found ;
i++, fieldnr= keyinfo->key_part[i].fieldnr - 1)
{ {
uint fieldnr= keyinfo->key_part[i].fieldnr - 1;
Field **f= table->field+fieldnr; Field **f= table->field+fieldnr;
if ((*f)->is_null()) null_found= (*f)->is_null();
null_found= TRUE;
} }
if (!null_found) if (!null_found)
......
...@@ -2442,14 +2442,11 @@ int Old_rows_log_event::find_row(const Relay_log_info *rli) ...@@ -2442,14 +2442,11 @@ int Old_rows_log_event::find_row(const Relay_log_info *rli)
BI image that is null and part of UNNI. BI image that is null and part of UNNI.
*/ */
bool null_found= FALSE; bool null_found= FALSE;
for (uint i=0; i < keyinfo->key_parts && !null_found; i++)
for (uint i=0, fieldnr= keyinfo->key_part[i].fieldnr - 1 ;
(i < keyinfo->key_parts) && !null_found ;
i++, fieldnr= keyinfo->key_part[i].fieldnr - 1)
{ {
uint fieldnr= keyinfo->key_part[i].fieldnr - 1;
Field **f= table->field+fieldnr; Field **f= table->field+fieldnr;
if ((*f)->is_null()) null_found= (*f)->is_null();
null_found= TRUE;
} }
if (!null_found) if (!null_found)
......
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