diff options
author | unknown <mats@romeo.(none)> | 2006-12-05 10:46:03 +0100 |
---|---|---|
committer | unknown <mats@romeo.(none)> | 2006-12-05 10:46:03 +0100 |
commit | 4924c61999cac4738f7f4a7422d600e0b7dcf3a3 (patch) | |
tree | c7b5012b7bab4c808f1bdbd7e09c51510c19585e /mysql-test/extra | |
parent | 2138534c134c89eb68cf17a3c7534a3459c1ea5b (diff) | |
download | mariadb-git-4924c61999cac4738f7f4a7422d600e0b7dcf3a3.tar.gz |
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''
Diffstat (limited to 'mysql-test/extra')
-rw-r--r-- | mysql-test/extra/rpl_tests/rpl_row_tabledefs.test | 40 |
1 files changed, 20 insertions, 20 deletions
diff --git a/mysql-test/extra/rpl_tests/rpl_row_tabledefs.test b/mysql-test/extra/rpl_tests/rpl_row_tabledefs.test index 54c14594cf4..c50a5613386 100644 --- a/mysql-test/extra/rpl_tests/rpl_row_tabledefs.test +++ b/mysql-test/extra/rpl_tests/rpl_row_tabledefs.test @@ -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; |