mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 11:45:32 +00:00
BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash
This patch adds functionality to row-based replication to ensure the slave's column sizes are >= to that of the master. It also includes some refactoring for the code from WL#3228. mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash Removed commented out portion of test referenced in bug report. This test supports the original request of the bug report. mysql-test/suite/rpl/r/rpl_extraCol_innodb.result: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash New result file for additional test. mysql-test/suite/rpl/r/rpl_extraCol_myisam.result: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash New result file for additional test. mysql-test/suite/rpl_ndb/r/rpl_ndb_extraCol.result: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash New result file for additional test. sql/field.cc: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash This patch refactors the additions made by this bug patch and those made by WL#3228. The effort consolidates the large switches on type() into functions within the field classes. sql/field.h: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash This patch refactors the additions made by this bug patch and those made by WL#3228. The effort consolidates the large switches on type() into functions within the field classes. sql/log_event.cc: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash This patch refactors the calc_field_size() method to use the new methods implemented in the field classes. It also corrects comments concerning how replication of field metadata works. sql/log_event.h: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash This patch refactors out the calc_field_size() method into the method save_field_metadata(). sql/rpl_utility.cc: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash This patch adds a method to check the size of the field on the master using the field metadata from WL#3228. Each column is checked to ensure the slave's column is >= to the master's column in size. sql/rpl_utility.h: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash This patch changes the table_def class so that it records the size of the metadata. This is a result of refactoring out the calc_field_size() method into the method save_field_metadata(). Prevents access via field_metadata(col) to unitialized memory when there is no metadata transmitted from the master. mysql-test/suite/rpl/r/rpl_row_colSize.result: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash New result file for additional test. mysql-test/suite/rpl/t/rpl_row_colSize.test: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash Added a test file to test each variable type that relies on field metadata from the master. mysql-test/include/test_fieldsize.inc: BUG#22086 : Extra Slave Col: Char(5) on slave and Char(10) on master cause mysqld crash Sub unit file to test each variable type that relies on field metadata from the master.
This commit is contained in:
@ -61,7 +61,7 @@ public:
|
||||
*/
|
||||
table_def(field_type *types, ulong size, uchar *field_metadata,
|
||||
int metadata_size, uchar *null_bitmap)
|
||||
: m_size(size), m_type(0),
|
||||
: m_size(size), m_type(0), m_field_metadata_size(metadata_size),
|
||||
m_field_metadata(0), m_null_bits(0), m_memory(NULL)
|
||||
{
|
||||
m_memory= (uchar *)my_multi_malloc(MYF(MY_WME),
|
||||
@ -190,7 +190,7 @@ public:
|
||||
uint16 field_metadata(uint index) const
|
||||
{
|
||||
DBUG_ASSERT(index < m_size);
|
||||
if (m_field_metadata)
|
||||
if (m_field_metadata_size)
|
||||
return m_field_metadata[index];
|
||||
else
|
||||
return 0;
|
||||
@ -239,6 +239,7 @@ private:
|
||||
ulong m_size; // Number of elements in the types array
|
||||
field_type *m_type; // Array of type descriptors
|
||||
uint16 *m_field_metadata;
|
||||
uint m_field_metadata_size;
|
||||
uchar *m_null_bits;
|
||||
uchar *m_memory;
|
||||
};
|
||||
|
Reference in New Issue
Block a user