| Bug #33245 | Crash on VIEW referencing FROM table in an IN clause | ||
|---|---|---|---|
| Submitted: | 14 Dec 2007 14:31 | Modified: | 16 Nov 2010 2:04 |
| Reporter: | Philip Stoev | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: Views | Severity: | S3 (Non-critical) |
| Version: | 6.0.4-BK, 6.0.5-BK | OS: | Any |
| Assigned to: | Sergey Petrunya | CPU Architecture: | Any |
[14 Dec 2007 14:31]
Philip Stoev
[14 Dec 2007 14:47]
Philip Stoev
From backtrace:
0x82d7a7e handle_segfault + 680
0x83571a9 _Z18convert_subq_to_sjP4JOINP17Item_in_subselect + 137
0x8357dca _ZN4JOIN18flatten_subqueriesEv + 610
0x836d994 _Z12mysql_selectP3THDPPP4ItemP10TABLE_LISTjR4ListIS1_ES2_jP8st_orderSB_S2_SB_yP13select_resultP18st_select_lex_unitP13st_select + 688
0x8473d20 _Z21mysql_derived_fillingP3THDP6st_lexP10TABLE_LIST + 464
0x8473acb _Z20mysql_handle_derivedP6st_lexPFbP3THDS0_P10TABLE_LISTE + 115
0x8335137 _Z28open_and_lock_tables_derivedP3THDP10TABLE_LISTb + 459
0x82f4392 _Z20open_and_lock_tablesP3THDP10TABLE_LIST + 32
0x82e7af1 _Z21execute_sqlcom_selectP3THDP10TABLE_LIST + 165
0x82e922c _Z21mysql_execute_commandP3THD + 1726
0x82f1a06 _Z11mysql_parseP3THDPKcjPS2_ + 518
0x82f2419 _Z16dispatch_command19enum_server_commandP3THDPcj + 2177
0x82f359f _Z10do_commandP3THD + 643
0x82e068d handle_one_connection + 279
From mysql-test-run --debug:
Warning: Not freed memory segments: 1
Warning: Memory that was not free'ed (256 bytes):
256 bytes at 0x0099bf518, allocated at line 39 in 'string.c'
From server log file:
071214 17:39:57 - mysqld got signal 11;
Maybe this is an optimizer bug?
[14 Dec 2007 15:43]
Valeriy Kravchuk
Thank you for a problem report. Had you used a -debug build? I can not repeat the crash with older non-debug 6.0.3 on Windows for example: C:\Program Files\MySQL\MySQL Server 5.1\bin>mysql -uroot test -P3311 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 6.0.3-alpha-community MySQL Community Server (GPL) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> CREATE TABLE t1 (f1 INT NOT NULL); Query OK, 0 rows affected (0.78 sec) mysql> CREATE VIEW v1 (a) AS SELECT f1 IN (SELECT f1 FROM t1) FROM t1; Query OK, 0 rows affected (0.14 sec) mysql> SELECT * FROM v1; Empty set (0.11 sec)
[14 Dec 2007 15:58]
Philip Stoev
I used a -debug build using the latest BK mysql-6.0 tree. I am also unable to reproduce this bug if I start the server on my own, however if you run the attached testcase using mysql-test-run --record, the crash will occur.
[14 Dec 2007 15:59]
Philip Stoev
Test case for bug #33245
Attachment: bug33245.test (text/plain), 120 bytes.
[14 Dec 2007 16:33]
Philip Stoev
I was able to repeat it with a freshly cloned and debug-compiled mysql-6.0 tree and mysql-test-run on the attached testcase. uname is: Linux philips 2.6.21-1.3194.fc7 #1 SMP Wed May 23 22:35:01 EDT 2007 i686 i686 i386 GNU/Linux That is, a 32-bit machine.
[14 Dec 2007 17:28]
Sveta Smirnova
Thank you for the report. Verified as described.
[28 Apr 2008 18:58]
Sergey Petrunya
Repeatable on latest mysql-6.0.6 opt-bk.
Stack trace:
Program received signal SIGSEGV, Segmentation fault.
0x08389be7 in replace_where_subcondition (join=0x8de6ad8, old_cond=0x8ddffb0,
new_cond=0x8de0598, do_fix_fields=false) at sql_select.cc:15000
15000 if (join->conds->type() == Item::COND_ITEM) {
(gdb) wher
#0 0x08389be7 in replace_where_subcondition (join=0x8de6ad8,
old_cond=0x8ddffb0, new_cond=0x8de0598, do_fix_fields=false)
at sql_select.cc:15000
#1 0x0839c937 in JOIN::flatten_subqueries (this=0x8de6ad8)
at sql_select.cc:3402
#2 0x083b2414 in mysql_select (thd=0x8d7b4c0, rref_pointer_array=0x8ddf1c8,
tables=0x8de0110, wild_num=0, fields=@0x8ddf158, conds=0x0, og_num=0,
order=0x0, group=0x0, having=0x0, proc_param=0x0,
select_options=2416200192, result=0x8de0390, unit=0x8ddee3c,
select_lex=0x8ddf0c4) at sql_select.cc:2950
#3 0x084c0020 in mysql_derived_filling (thd=0x8d7b4c0, lex=0x8d7c678,
orig_table_list=0x8ddea18) at sql_derived.cc:264
#4 0x084bfdcb in mysql_handle_derived (lex=0x8d7c678,
processor=0x84bfe50 <mysql_derived_filling(THD*, st_lex*, TABLE_LIST*)>)
at sql_derived.cc:56
#5 0x08379eed in open_and_lock_tables_derived (thd=0x8d7b4c0,
tables=0x8ddea18, derived=true) at sql_base.cc:4810
#6 0x083375de in open_and_lock_tables (thd=0x8d7b4c0, tables=0x8ddea18)
at mysql_priv.h:1569
#7 0x0832a3e1 in execute_sqlcom_select (thd=0x8d7b4c0, all_tables=0x8ddea18)
at sql_parse.cc:4771
#8 0x0832bb3a in mysql_execute_command (thd=0x8d7b4c0) at sql_parse.cc:1994
#9 0x083349b0 in mysql_parse (thd=0x8d7b4c0,
---Type <return> to continue, or q <return> to quit---
inBuf=0x8dde8e0 "SELECT * FROM v1", length=16, found_semicolon=0xb0388260)
at sql_parse.cc:5767
#10 0x08335408 in dispatch_command (command=COM_QUERY, thd=0x8d7b4c0,
packet=0x8dcfc51 "SELECT * FROM v1", packet_length=16) at sql_parse.cc:1044
#11 0x08336668 in do_command (thd=0x8d7b4c0) at sql_parse.cc:721
#12 0x0832292b in handle_one_connection (arg=0x8d7b4c0) at sql_connect.cc:1134
#13 0xb7f6618b in start_thread () from /lib/libpthread.so.0
#14 0xb7d7209e in clone () from /lib/libc.so.6
The reason for crash:
(gdb) p join->conds
$1 = (COND *) 0x0
[28 Apr 2008 21:39]
Sergey Petrunya
The actual cause of the problem was that thd->thd_marker was initialized after derived table/VIEW processing. The value of thd->thd_marker is used by semi-join applicability check to determine if the subquery is an AND-part of WHERE clause or or not. Uninitialized value could cause mysqld to conclude that the subquery that is located in the select_list is located in the WHERE, which would later cause crash because of logical inconsistencies.
[28 Apr 2008 23:01]
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/46152 ChangeSet@1.2628, 2008-04-29 03:00:37+04:00, sergefp@mysql.com +9 -0 BUG#33245: Crash on VIEW referencing FROM table in an IN clause: - Initialize thd->thd_marker.emb_on_expr_nest before we process derived tables/VIEWs. The processing may invoke in_subquery_predicate->fix_fields() which required thd->thd_marker to have correct value - Code cleanup: make thd->thd_marker a union with a member having meaningful type/name
[28 May 2008 10:02]
Bugs System
Pushed into 6.0.6-alpha
[15 Jul 2008 20:16]
Paul DuBois
Noted in 6.0.6 changelog. Selecting from a view that referenced the same table in the FROM clause and an IN clause caused a server crash.
[16 Aug 2010 6:31]
Bugs System
Pushed into mysql-next-mr (revid:alik@sun.com-20100816062819-bluwgdq8q4xysmlg) (version source revid:alik@sun.com-20100816062612-enatdwnv809iw3s9) (pib:20)
[13 Nov 2010 16:21]
Bugs System
Pushed into mysql-trunk 5.6.99-m5 (revid:alexander.nozdrin@oracle.com-20101113155825-czmva9kg4n31anmu) (version source revid:vasil.dimov@oracle.com-20100629074804-359l9m9gniauxr94) (merge vers: 5.6.99-m4) (pib:21)
[16 Nov 2010 2:04]
Paul DuBois
Noted in 5.6.1 changelog.
