Bug #24487 Valgrind: uninited byte in table->record[1] in binlog code for rbr + innodb

The reason of this valgrind's compaint is not a bug but rather a feature of bitwise ops:
for any value of the byte x
x | 1 -> 1,  and x & 0 -> 0.
x, being a null_byte part of record[1] can be left unassigned even after
ha_innobase::index_read_idx because the above and still be correct.
Addding a check memory upon the invocation of the function can detect this fact
long before record[1], old record, is eventually passed to my_write.

Fixed with initialization of record[1]'s null_bytes part in open_table_from_share.
parent 6b4d69c5
...@@ -1400,6 +1400,7 @@ int open_table_from_share(THD *thd, TABLE_SHARE *share, const char *alias, ...@@ -1400,6 +1400,7 @@ int open_table_from_share(THD *thd, TABLE_SHARE *share, const char *alias,
if (records > 1) if (records > 1)
{ {
memcpy(outparam->record[0], share->default_values, share->rec_buff_length); memcpy(outparam->record[0], share->default_values, share->rec_buff_length);
memcpy(outparam->record[1], share->default_values, share->null_bytes);
if (records > 2) if (records > 2)
memcpy(outparam->record[1], share->default_values, memcpy(outparam->record[1], share->default_values,
share->rec_buff_length); share->rec_buff_length);
......
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