Bug #35577 | CREATE PROCEDURE causes either crash or syntax error depending on build | ||
---|---|---|---|
Submitted: | 26 Mar 2008 16:36 | Modified: | 24 Jul 2008 17:46 |
Reporter: | David Shrewsbury | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Parser | Severity: | S1 (Critical) |
Version: | 5.0.50sp1a, 5.0.52, 5.0.58, 5.0.62, 5.1.23 | OS: | Any |
Assigned to: | Marc ALFF | CPU Architecture: | Any |
[26 Mar 2008 16:36]
David Shrewsbury
[26 Mar 2008 16:40]
MySQL Verification Team
affects 5.1.23 also. stack trace: mysqld.exe!MYSQLparse mysqld.exe!parse_sql mysqld.exe!mysql_parse mysqld.exe!dispatch_command mysqld.exe!do_command mysqld.exe!handle_one_connection mysqld.exe!pthread_start mysqld.exe!_callthreadstart mysqld.exe!_threadstart
[26 Mar 2008 17:55]
David Shrewsbury
Correction: A higher thread_stack doesn't seem to really fix this.
[27 Mar 2008 0:59]
Marc ALFF
Analysis The root cause of the crash / unpredictable syntax errors is a stack corruption of the *internal* parser stack in bison. After my_yyoverflow() is called, a call to lex_end() with a non null thd->lex->yacc_yyss stack pointer will crash the parser, when this call originates from within the parser itself, in sp_head::reset_lex(). Changing the *thread* stack size will have no effect.
[28 Mar 2008 17:32]
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/44606 ChangeSet@1.2606, 2008-03-28 11:32:08-06:00, malff@lambda.hsd1.co.comcast.net. +12 -0 Bug#35577 (CREATE PROCEDURE causes either crash or syntax error depending on build) The crash was caused by freeing the internal parser stack during the parser execution. This occured only for complex stored procedures, after reallocating the parser stack using my_yyoverflow(), with the following C call stack: - MYSQLparse() - any rule calling sp_head::restore_lex() - lex_end() - x_free(lex->yacc_yyss), xfree(lex->yacc_yyvs) The root cause is the implementation of stored procedures, which breaks the assumption from 4.1 that there is only one LEX structure per parser call. The solution is to separate the LEX structure into: - attributes that represent a statement (the current LEX structure), - attributes that relate to the parser itself (Parser_state), so that parsing multiple statements in stored programs can create multiple LEX structures while not changing the unique Parser_state.
[9 Jun 2008 15:29]
Marc ALFF
See related Bug#37269 parser crash when creating stored procedure Bug#37228 Sever crashes when creating stored procedure with more than 10 IF/ELSEIF
[23 Jun 2008 23:17]
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/48363
[10 Jul 2008 16:58]
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/49482
[14 Jul 2008 21:41]
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/49718
[15 Jul 2008 1:44]
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/49728
[15 Jul 2008 1:45]
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/49729
[15 Jul 2008 13:04]
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/49760 2700 Gleb Shchepa 2008-07-15 [merge] merge from local tree to 5.1-bugteam
[22 Jul 2008 18:38]
Bugs System
Pushed into 5.1.28
[22 Jul 2008 18:39]
Bugs System
Pushed into 5.0.68
[23 Jul 2008 0:27]
Paul DuBois
Noted in 5.1.28 changelog. Freeing of an internal parser stack during parsing of complex stored programs caused a server crash. Setting report to Need Doc Info pending push into 5.0.x/6.0.x.
[23 Jul 2008 15:41]
Paul DuBois
Noted in 5.0.68 changelog. Setting report to Need Doc Info pending push of fix into 6.0.x.
[24 Jul 2008 17:46]
Paul DuBois
Noted in 6.0.7 changelog.
[28 Jul 2008 13:47]
Bugs System
Pushed into 5.0.68 (revid:kpettersson@mysql.com-20080715152926-s5kgnqhtu93b3c8v) (pib:2) (Retry automatic marking, to ensure nothing is missed. cm01)
[28 Jul 2008 14:45]
Bugs System
Pushed into 6.0.7-alpha (revid:alik@mysql.com-20080725172155-fnc73o50e4tgl23k) (version source revid:alik@mysql.com-20080725172155-fnc73o50e4tgl23k) (pib:3)
[28 Jul 2008 16:44]
Bugs System
Pushed into 5.1.28 (revid:davi.arnaut@sun.com-20080722182431-0i2f1yc4uocime9q) (version source revid:davi.arnaut@sun.com-20080722182431-0i2f1yc4uocime9q) (pib:3)
[13 Sep 2008 20:45]
Bugs System
Pushed into 6.0.7-alpha (revid:marc.alff@sun.com-20080715014312-71bsv5xo3dplugoi) (version source revid:hakan@mysql.com-20080725175322-8wgujj5xuzrjz3ke) (pib:3)