diff options
author | Oleksandr Byelkin <sanja@mariadb.com> | 2020-02-03 18:20:24 +0100 |
---|---|---|
committer | Oleksandr Byelkin <sanja@mariadb.com> | 2020-02-05 08:20:47 +0100 |
commit | da89421737ac69f0b1db7c194fe6d1d3ee6aea41 (patch) | |
tree | 677fa9223675acd7ce78b111a797fa2b36dd611c | |
parent | 46386661a2311cabd7bac914c44b1af0b4746e07 (diff) | |
download | mariadb-git-bb-10.4-MDEV-21616.tar.gz |
MDEV-21616: Server crash when using "SET STATEMENT max_statement_time=0 FOR desc xxx" lead to collapsebb-10.4-MDEV-21616
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; } |