diff options
author | Oleksandr Byelkin <sanja@mariadb.com> | 2020-02-03 18:20:24 +0100 |
---|---|---|
committer | Oleksandr Byelkin <sanja@mariadb.com> | 2020-02-05 13:37:12 +0100 |
commit | c1eaa385ffb44bdf6264d2cc4b4cc0e10284c88a (patch) | |
tree | c4bcb646494b4475363a5ca73c892419c695b11c | |
parent | 2acc6f2d95d31f4ea82de8a66c5f2f7fd6583a16 (diff) | |
download | mariadb-git-c1eaa385ffb44bdf6264d2cc4b4cc0e10284c88a.tar.gz |
MDEV-21616: Server crash when using "SET STATEMENT max_statement_time=0 FOR desc xxx" lead to collapse
Main select should be pushed first.
-rw-r--r-- | mysql-test/main/parser.result | 10 | ||||
-rw-r--r-- | mysql-test/main/parser.test | 10 | ||||
-rw-r--r-- | sql/sql_yacc.yy | 6 |
3 files changed, 26 insertions, 0 deletions
diff --git a/mysql-test/main/parser.result b/mysql-test/main/parser.result index b39f496e3db..868e3458368 100644 --- a/mysql-test/main/parser.result +++ b/mysql-test/main/parser.result @@ -1797,4 +1797,14 @@ select * from t2; ERROR HY000: Table 't2' was not locked with LOCK TABLES SET STATEMENT max_statement_time=900 FOR unlock tables; drop table t1, t2; +# +# MDEV-21616: Server crash when using +# "SET STATEMENT max_statement_time=0 FOR desc xxx" lead to collapse +# +create table t1 (a int); +SET STATEMENT max_statement_time=0 FOR desc t1; +Field Type Null Key Default Extra +a int(11) YES NULL +drop table t1; +SET STATEMENT max_statement_time=0 FOR do 1; # End of 10.4 tests diff --git a/mysql-test/main/parser.test b/mysql-test/main/parser.test index c6e9f13cdaf..54048d0de1d 100644 --- a/mysql-test/main/parser.test +++ b/mysql-test/main/parser.test @@ -1565,4 +1565,14 @@ select * from t2; SET STATEMENT max_statement_time=900 FOR unlock tables; drop table t1, t2; +--echo # +--echo # MDEV-21616: Server crash when using +--echo # "SET STATEMENT max_statement_time=0 FOR desc xxx" lead to collapse +--echo # + +create table t1 (a int); +SET STATEMENT max_statement_time=0 FOR desc t1; +drop table t1; +SET STATEMENT max_statement_time=0 FOR do 1; + --echo # End of 10.4 tests diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 476196f38ea..ed04d2a0584 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -13253,11 +13253,14 @@ do: { LEX *lex=Lex; lex->sql_command = SQLCOM_DO; + if (lex->main_select_push()) + MYSQL_YYABORT; mysql_init_select(lex); } expr_list { Lex->insert_list= $3; + Lex->pop_select(); //main select } ; @@ -14552,6 +14555,8 @@ describe: describe_command table_ident { LEX *lex= Lex; + if (lex->main_select_push()) + MYSQL_YYABORT; mysql_init_select(lex); lex->current_select->parsing_place= SELECT_LIST; lex->sql_command= SQLCOM_SHOW_FIELDS; @@ -14563,6 +14568,7 @@ describe: opt_describe_column { Select->parsing_place= NO_MATTER; + Lex->pop_select(); //main select } | describe_command opt_extended_describe { Lex->describe|= DESCRIBE_NORMAL; } |