summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOleksandr Byelkin <sanja@mariadb.com>2020-02-03 18:20:24 +0100
committerOleksandr Byelkin <sanja@mariadb.com>2020-02-05 08:20:47 +0100
commitda89421737ac69f0b1db7c194fe6d1d3ee6aea41 (patch)
tree677fa9223675acd7ce78b111a797fa2b36dd611c
parent46386661a2311cabd7bac914c44b1af0b4746e07 (diff)
downloadmariadb-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.result10
-rw-r--r--mysql-test/main/parser.test10
-rw-r--r--sql/sql_yacc.yy6
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; }