| Bug #31075 | crash in get_func_mm_tree | ||
|---|---|---|---|
| Submitted: | 18 Sep 2007 5:28 | Modified: | 1 Nov 2007 3:06 | 
| Reporter: | Shane Bester (Platinum Quality Contributor) | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: Optimizer | Severity: | S2 (Serious) | 
| Version: | 5.1.23BK | OS: | Any | 
| Assigned to: | Gleb Shchepa | CPU Architecture: | Any | 
   [18 Sep 2007 5:28]
   Shane Bester        
  
 
   [18 Sep 2007 10:12]
   MySQL Verification Team        
  testcase -------------- drop table if exists t1; create table `t1` (`col000` time ,key(`col000` ),`col001` tinyblob ,key(`col001` (1)))engine=myisam; insert into t1 values (),(),(),(),(),(),(),(),(),(); select interval(col001,col000,col000,col001,col001,col000) from t1 where col000 not in (col000,col001,col001,col000,col000) group by convert(col000 using hp8) ;
   [18 Sep 2007 10:15]
   MySQL Verification Team        
  sometimes the testcase will cause a hang. sometimes nothing, but memory is silently overridden/corrupted in this case. recommend running under valgrind or debug server to test.
   [18 Sep 2007 10:15]
   Domas Mituzas        
  Same crash on Mac:
5056          if (func->array->result_type() != ROW_RESULT)
(gdb) bt
#0  0x0019c40b in get_func_mm_tree (param=0xb04c8338, cond_func=0x50930e8, field=0x5090f50, value=0x0, cmp_type=INT_RESULT, inv=1) at opt_range.cc:5056
#1  0x0019c8fb in get_full_func_mm_tree (param=0xb04c8338, cond_func=0x50930e8, field_item=0x5092d20, value=0x0, inv=true) at opt_range.cc:5312
#2  0x0019cf3a in get_mm_tree (param=0xb04c8338, cond=0x50930e8) at opt_range.cc:5459
#3  0x0019e37a in SQL_SELECT::test_quick_select (this=0x5093898, thd=0x5082400, keys_to_use={map = 1}, prev_tables=0, limit=18446744073709551615, force_quick_range=false) at opt_range.cc:2252
#4  0x0012442f in make_join_statistics (join=0x50fd010, tables=0x0, conds=0x50930e8, keyuse_array=0x50fe114) at sql_select.cc:2356
#5  0x00128482 in JOIN::optimize (this=0x50fd010) at sql_select.cc:933
#6  0x00134152 in mysql_select (thd=0x5082400, rref_pointer_array=0x5083568, tables=0x5092b38, wild_num=0, fields=@0x5083504, conds=0x50930e8, og_num=1, order=0x0, group=0x50932c8, having=0x0, proc_param=0x0, select_options=2147764736, result=0x5093358, unit=0x5083208, select_lex=0x5083470) at sql_select.cc:2299
#7  0x00134749 in handle_select (thd=0x5082400, lex=0x50831ac, result=0x5093358, setup_tables_done_option=0) at sql_select.cc:263
#8  0x000ba304 in execute_sqlcom_select (thd=0x5082400, all_tables=0x5092b38) at sql_parse.cc:4549
#9  0x000bce9b in mysql_execute_command (thd=0x5082400) at sql_parse.cc:1886
#10 0x000c48ea in mysql_parse (thd=0x5082400, inBuf=0x5092410 "select interval(col001,col000,col000,col001,col001,col000) from t1 where col000 not in\n(col000,col001,col001,col000,col000) group by convert(col000 using hp8)", length=158, found_semicolon=0xb04cbe3c) at sql_parse.cc:5462
#11 0x000c5736 in dispatch_command (command=COM_QUERY, thd=0x5082400, packet=0x3f49001 "select interval(col001,col000,col000,col001,col001,col000) from t1 where col000 not in\n(col000,col001,col001,col000,col000) group by convert(col000 using hp8)", packet_length=159) at sql_parse.cc:958
#12 0x000c688a in do_command (thd=0x5082400) at sql_parse.cc:717
#13 0x000b56d2 in handle_one_connection (arg=0x5082400) at sql_connect.cc:1099
#14 0x90024227 in _pthread_body ()
 
   [18 Sep 2007 10:17]
   Domas Mituzas        
  stripped the header of previous paste: Program received signal EXC_BAD_ACCESS, Could not access memory. Reason: KERN_PROTECTION_FAILURE at address: 0x00000000 [Switching to process 5813 thread 0x3103] 0x0019c40b in get_func_mm_tree (param=0xb04c8338, cond_func=0x50930e8, field=0x5090f50, value=0x0, cmp_type=INT_RESULT, inv=1) at opt_range.cc:5056 5056 if (func->array->result_type() != ROW_RESULT)
   [18 Sep 2007 10:35]
   Valeriy Kravchuk        
  Same crash on 5.1.23-BK on Linux, even without -debug: openxs@linux:~/dbs/5.1> bin/mysql -uroot test Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.1.23-beta Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> create table t01 (c1 time, key(c1), c2 tinyblob, key(c2(1))) engine=MyISAM; Query OK, 0 rows affected (0.04 sec) mysql> insert into t01 values (), (), (), (), (), (), (), (), (), (); Query OK, 10 rows affected (0.01 sec) Records: 10 Duplicates: 0 Warnings: 0 mysql> select interval(c2,c1,c1,c2,c2,c1) from t01 where c1 not in (c1, c2, c2, c1, c1) group by convert(c1 using hp8); ERROR 2013 (HY000): Lost connection to MySQL server during query mysql> 070913 15:00:59 mysqld_safe Number of processes running now: 0 070913 15:01:00 mysqld_safe mysqld restarted mysql> exit Bye openxs@linux:~/dbs/5.1> vi var/linux.err openxs@linux:~/dbs/5.1> vi 31075.stack openxs@linux:~/dbs/5.1> nm -n libexec/mysqld > /tmp/mysqld51.sym openxs@linux:~/dbs/5.1> bin/resolve_stack_dump -s /tmp/mysqld51.sym -n 31075.stack 0x8214dbb handle_segfault + 683 0x82ed239 _Z16get_func_mm_treeP15RANGE_OPT_PARAMP9Item_funcP5FieldP4Item11Item_resultb + 153 0x82ed86e _Z21get_full_func_mm_treeP15RANGE_OPT_PARAMP9Item_funcP10Item_fieldP4Itemb + 494 0x82edc54 _Z11get_mm_treeP15RANGE_OPT_PARAMP4Item + 980 0x82f0137 _ZN10SQL_SELECT17test_quick_selectEP3THD6BitmapILj64EEymb + 2311
   [22 Sep 2007 21:13]
   MySQL Verification Team        
  so far I've only seen this particular crash with "not in (..)" clauses in the query
   [23 Sep 2007 21:49]
   Bugs System        
  A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/34500 ChangeSet@1.2562, 2007-09-23 22:51:25+02:00, gshchepa@devsrv-b.mysql.com +3 -0 Fixed bug #31075. The `SELECT col FROM t WHERE col NOT IN (col, ...) GROUP BY col' crashed in the range optimizer. The get_func_mm_tree function has been modified to check the Item_func_in::array field for the NULL value before using of that value.
   [23 Sep 2007 23:00]
   Bugs System        
  A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/34501 ChangeSet@1.2562, 2007-09-24 00:02:39+02:00, gshchepa@devsrv-b.mysql.com +3 -0 Fixed bug #31075. The `SELECT col FROM t WHERE col NOT IN (col, ...) GROUP BY col' crashed in the range optimizer. The get_func_mm_tree function has been modified to check the Item_func_in::array field for the NULL value before using of that value.
   [26 Sep 2007 11:43]
   Bugs System        
  A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/34556 ChangeSet@1.2562, 2007-09-26 12:45:08+02:00, gshchepa@devsrv-b.mysql.com +3 -0 Fixed bug #31075. The `SELECT col FROM t WHERE col NOT IN (col, ...) GROUP BY col' crashed in the range optimizer. The get_func_mm_tree function has been modified to check the Item_func_in::array field for the NULL value before using of that value.
   [29 Oct 2007 8:46]
   Bugs System        
  Pushed into 5.1.23-beta
   [29 Oct 2007 8:50]
   Bugs System        
  Pushed into 6.0.4-alpha
   [1 Nov 2007 3:06]
   Paul DuBois        
  Noted in 5.1.23, 6.0.4 changelogs. Expressions of the form WHERE col NOT IN (col, ...), where the same column was named both times, could cause a server crash in the optimizer.

