From: Date: November 24 2008 5:24pm Subject: bzr commit into mysql-5.1 branch (mattias.jonsson:2708) Bug#40954 List-Archive: http://lists.mysql.com/commits/59696 X-Bug: 40954 Message-Id: <20081124162416.13E36182040B@witty.local> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7BIT #At file:///Users/mattiasj/clones/bzrroot/b40954-51-bugteam/ 2708 Mattias Jonsson 2008-11-24 Bug#40954: Crash in MyISAM index code with concurrency test using partitioned tables Problem was usage of read_range_first with an empty key. Solution was to not to give a key if it was empty. modified: mysql-test/r/partition.result mysql-test/t/partition.test sql/ha_partition.cc per-file messages: mysql-test/r/partition.result Bug#40954: Crash in MyISAM index code with concurrency test using partitioned tables Updated test result. mysql-test/t/partition.test Bug#40954: Crash in MyISAM index code with concurrency test using partitioned tables Added test case sql/ha_partition.cc Bug#40954: Crash in MyISAM index code with concurrency test using partitioned tables Problem was usage of read_range_first with an empty key. Solution was to not to give a key if it was empty. === modified file 'mysql-test/r/partition.result' --- a/mysql-test/r/partition.result 2008-11-06 14:18:25 +0000 +++ b/mysql-test/r/partition.result 2008-11-24 16:24:03 +0000 @@ -1,4 +1,16 @@ drop table if exists t1, t2; +CREATE TABLE t1 ( +pk INT NOT NULL AUTO_INCREMENT, +PRIMARY KEY (pk) +) +/*!50100 PARTITION BY HASH (pk) +PARTITIONS 2 */; +INSERT INTO t1 VALUES (NULL); +INSERT INTO t1 VALUES (NULL); +INSERT INTO t1 VALUES (NULL); +SELECT * FROM t1 WHERE pk < 0 ORDER BY pk; +pk +DROP TABLE t1; CREATE TABLE t1 (a INT NOT NULL, KEY(a)) PARTITION BY RANGE(a) (PARTITION p1 VALUES LESS THAN (200), PARTITION pmax VALUES LESS THAN MAXVALUE); === modified file 'mysql-test/t/partition.test' --- a/mysql-test/t/partition.test 2008-11-06 14:18:25 +0000 +++ b/mysql-test/t/partition.test 2008-11-24 16:24:03 +0000 @@ -15,6 +15,21 @@ drop table if exists t1, t2; --enable_warnings # +# Bug#40954: Crash if range search and order by. +# +CREATE TABLE t1 ( + pk INT NOT NULL AUTO_INCREMENT, + PRIMARY KEY (pk) +) +/*!50100 PARTITION BY HASH (pk) +PARTITIONS 2 */; +INSERT INTO t1 VALUES (NULL); +INSERT INTO t1 VALUES (NULL); +INSERT INTO t1 VALUES (NULL); +SELECT * FROM t1 WHERE pk < 0 ORDER BY pk; +DROP TABLE t1; + +# # Bug#40494: Crash MYSQL server crashes on range access with partitioning # and order by # === modified file 'sql/ha_partition.cc' --- a/sql/ha_partition.cc 2008-11-10 20:13:24 +0000 +++ b/sql/ha_partition.cc 2008-11-24 16:24:03 +0000 @@ -4490,7 +4490,8 @@ int ha_partition::handle_ordered_index_s This can only read record to table->record[0], as it was set when the table was being opened. We have to memcpy data ourselves. */ - error= file->read_range_first(&m_start_key, end_range, eq_range, TRUE); + error= file->read_range_first(m_start_key.key? &m_start_key: NULL, + end_range, eq_range, TRUE); memcpy(rec_buf_ptr, table->record[0], m_rec_length); reverse_order= FALSE; break;