mirror of
https://github.com/MariaDB/server.git
synced 2026-05-16 11:57:38 +02:00
BUG#24490 (segfault inside unpack_row at Field_bit_as_char::set_default()):
Field_bit::set_default() did not check the bit_len, hence used the undefined bit_ptr, causing a crash. The patch adds a check that bit_len > 0 before following the bit_ptr. mysql-test/extra/rpl_tests/rpl_row_tabledefs.test: Doing select using ORDER BY to prevent table-internal order from affecting the result. mysql-test/r/rpl_row_tabledefs_2myisam.result: Result change mysql-test/r/rpl_row_tabledefs_3innodb.result: Result change sql/field.cc: Checking bit_len before following the bit_ptr, since bit_ptr has no sensible value in the case that bit_len == 0. sql/field.h: Field_bit::set_default() used the bit_ptr, but it is undefined, hence causing a crash. In reality, the hierarchy order is not correct so added a TODO comment about refactoring. sql/log_event.cc: Code was manipulating bits for a FIELD_TYPE_BIT field without checking if the bit_len was > 0, hence using an undefined bit_ptr when the class was actually a Field_bit_as_char. mysql-test/t/rpl_row_tabledefs_3innodb-slave.opt: New BitKeeper file ``mysql-test/t/rpl_row_tabledefs_3innodb-slave.opt''
This commit is contained in:
parent
2138534c13
commit
4924c61999
7 changed files with 94 additions and 80 deletions
|
|
@ -80,28 +80,28 @@ INSERT INTO t1_bit VALUES (1,2);
|
|||
INSERT INTO t1_bit VALUES (2,5);
|
||||
INSERT INTO t1_char VALUES (1,2);
|
||||
INSERT INTO t1_char VALUES (2,5);
|
||||
SELECT * FROM t1_int;
|
||||
SELECT * FROM t1_bit;
|
||||
SELECT * FROM t1_char;
|
||||
SELECT * FROM t1_int ORDER BY a;
|
||||
SELECT * FROM t1_bit ORDER BY a;
|
||||
SELECT * FROM t1_char ORDER BY a;
|
||||
--echo **** On Slave ****
|
||||
sync_slave_with_master;
|
||||
SELECT a,b,x FROM t1_int;
|
||||
SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit;
|
||||
SELECT a,b,x FROM t1_char;
|
||||
SELECT a,b,x FROM t1_int ORDER BY a;
|
||||
SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit ORDER BY a;
|
||||
SELECT a,b,x FROM t1_char ORDER BY a;
|
||||
|
||||
--echo **** On Master ****
|
||||
connection master;
|
||||
UPDATE t1_int SET b=2*b WHERE a=2;
|
||||
UPDATE t1_char SET b=2*b WHERE a=2;
|
||||
UPDATE t1_bit SET b=2*b WHERE a=2;
|
||||
SELECT * FROM t1_int;
|
||||
SELECT * FROM t1_bit;
|
||||
SELECT * FROM t1_char;
|
||||
SELECT * FROM t1_int ORDER BY a;
|
||||
SELECT * FROM t1_bit ORDER BY a;
|
||||
SELECT * FROM t1_char ORDER BY a;
|
||||
--echo **** On Slave ****
|
||||
sync_slave_with_master;
|
||||
SELECT a,b,x FROM t1_int;
|
||||
SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit;
|
||||
SELECT a,b,x FROM t1_char;
|
||||
SELECT a,b,x FROM t1_int ORDER BY a;
|
||||
SELECT a,b,HEX(x),HEX(y),HEX(z) FROM t1_bit ORDER BY a;
|
||||
SELECT a,b,x FROM t1_char ORDER BY a;
|
||||
|
||||
# Each of these inserts should generate an error and stop the slave
|
||||
|
||||
|
|
@ -188,11 +188,11 @@ sync_slave_with_master;
|
|||
connection master;
|
||||
INSERT INTO t7 VALUES (1),(2),(3);
|
||||
INSERT INTO t8 VALUES (1),(2),(3);
|
||||
SELECT * FROM t7;
|
||||
SELECT * FROM t8;
|
||||
SELECT * FROM t7 ORDER BY a;
|
||||
SELECT * FROM t8 ORDER BY a;
|
||||
sync_slave_with_master;
|
||||
SELECT * FROM t7;
|
||||
SELECT * FROM t8;
|
||||
SELECT * FROM t7 ORDER BY a;
|
||||
SELECT * FROM t8 ORDER BY a;
|
||||
|
||||
# We will now try to update and then delete a row on the master where
|
||||
# the extra field on the slave does not have a default value. This
|
||||
|
|
@ -216,20 +216,20 @@ INSERT INTO t1_nodef VALUES (2,4,6);
|
|||
--echo **** On Master ****
|
||||
connection master;
|
||||
UPDATE t1_nodef SET b=2*b WHERE a=1;
|
||||
SELECT * FROM t1_nodef;
|
||||
SELECT * FROM t1_nodef ORDER BY a;
|
||||
|
||||
--echo **** On Slave ****
|
||||
sync_slave_with_master;
|
||||
SELECT * FROM t1_nodef;
|
||||
SELECT * FROM t1_nodef ORDER BY a;
|
||||
|
||||
--echo **** On Master ****
|
||||
connection master;
|
||||
DELETE FROM t1_nodef WHERE a=2;
|
||||
SELECT * FROM t1_nodef;
|
||||
SELECT * FROM t1_nodef ORDER BY a;
|
||||
|
||||
--echo **** On Slave ****
|
||||
sync_slave_with_master;
|
||||
SELECT * FROM t1_nodef;
|
||||
SELECT * FROM t1_nodef ORDER BY a;
|
||||
|
||||
--echo **** Cleanup ****
|
||||
connection master;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue