#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);
}
| Thread |
|---|
| • bzr commit into mysql-5.0 branch (kgeorge:2648) Bug#37943 | Georgi Kodinov | 15 Jul |