From: Date: July 15 2008 2:50pm Subject: bzr commit into mysql-5.0 branch (kgeorge:2648) Bug#37943 List-Archive: http://lists.mysql.com/commits/49758 X-Bug: 37943 Message-Id: <200807151250.m6FCofxq023645@magare.gmz> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit #At file:///home/kgeorge/mysql/bzr/B37943-5.0-bugteam/ 2648 Georgi Kodinov 2008-07-15 Bug#37943 : Reproducible mysqld crash/sigsegv in sel_trees_can_be_ored A tree can mention a key and have no key test (e.g. it's an OR tree). So we need to check if there's a key test before using it in sel_tree_can_be_ored. modified: mysql-test/r/index_merge.result mysql-test/t/index_merge.test sql/opt_range.cc per-file messages: mysql-test/r/index_merge.result Bug#37943 : test case mysql-test/t/index_merge.test Bug#37943 : test case sql/opt_range.cc Bug#37943 : check for a key test before using it === modified file 'mysql-test/r/index_merge.result' --- a/mysql-test/r/index_merge.result 2007-11-30 05:32:04 +0000 +++ b/mysql-test/r/index_merge.result 2008-07-15 12:50:10 +0000 @@ -518,3 +518,13 @@ a filler b 4 zz 4 5 qq 4 drop table t1, t2; +CREATE TABLE t1 (a varchar(8), b set('a','b','c','d','e','f','g','h'), +KEY b(b), KEY a(a)); +INSERT INTO t1 VALUES ('y',''), ('z',''); +SELECT b,a from t1 WHERE (b!='c' AND b!='f' && b!='h') OR +(a='pure-S') OR (a='DE80337a') OR (a='DE80799'); +b a + y + z +DROP TABLE t1; +End of 5.0 tests === modified file 'mysql-test/t/index_merge.test' --- a/mysql-test/t/index_merge.test 2007-07-14 18:02:10 +0000 +++ b/mysql-test/t/index_merge.test 2008-07-15 12:50:10 +0000 @@ -463,3 +463,18 @@ select * from t2 where a=4 or b=4; drop table t1, t2; +# +# Bug #37943: Reproducible mysqld crash/sigsegv in sel_trees_can_be_ored +# + +CREATE TABLE t1 (a varchar(8), b set('a','b','c','d','e','f','g','h'), + KEY b(b), KEY a(a)); +INSERT INTO t1 VALUES ('y',''), ('z',''); + +#should not crash +SELECT b,a from t1 WHERE (b!='c' AND b!='f' && b!='h') OR + (a='pure-S') OR (a='DE80337a') OR (a='DE80799'); + +DROP TABLE t1; + +--echo End of 5.0 tests === modified file 'sql/opt_range.cc' --- a/sql/opt_range.cc 2008-03-28 18:02:27 +0000 +++ b/sql/opt_range.cc 2008-07-15 12:50:10 +0000 @@ -4724,7 +4724,7 @@ bool sel_trees_can_be_ored(SEL_TREE *tre { key1= tree1->keys + key_no; key2= tree2->keys + key_no; - if ((*key1)->part == (*key2)->part) + if (*key1 && *key2 && (*key1)->part == (*key2)->part) { DBUG_RETURN(TRUE); }