summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergei Golubchik <serg@mariadb.org>2022-05-16 17:07:50 +0200
committerSergei Golubchik <serg@mariadb.org>2022-05-16 20:18:18 +0200
commit4a8a6f605d3f9c8cbca14a04cb75c6d2a29fb6f6 (patch)
treed94bdcaba4a2afae612e48f116ef2017cfee77af
parenta2bcfa64fee99bd6892a198ebb20043a39523d40 (diff)
downloadmariadb-git-4a8a6f605d3f9c8cbca14a04cb75c6d2a29fb6f6.tar.gz
MDEV-28578 Server crashes in Item_field::fix_outer_field after CREATE SELECT
same as MDEV-26412, but in CREATE...SELECT. fix: apply 39feab3cd31b to create rule too.
-rw-r--r--mysql-test/main/insert.result8
-rw-r--r--mysql-test/main/insert.test9
-rw-r--r--sql/sql_yacc.yy1
3 files changed, 18 insertions, 0 deletions
diff --git a/mysql-test/main/insert.result b/mysql-test/main/insert.result
index af7dcbedd1f..8423319f557 100644
--- a/mysql-test/main/insert.result
+++ b/mysql-test/main/insert.result
@@ -770,4 +770,12 @@ create table t (a int);
select 1 in (select count(*) from t t1 join (t t2 join t t3 on (t1.a != 0)));
ERROR 42S22: Unknown column 't1.a' in 'on clause'
drop table t;
+#
+# MDEV-28578 Server crashes in Item_field::fix_outer_field after CREATE SELECT
+#
+create table t1 (i int) ;
+create table t2 (j int) ;
+create table t4 select * from t1 join t2 on (select t3.i);
+ERROR 42S22: Unknown column 't3.i' in 'field list'
+drop table t1, t2;
# End of 10.4 tests
diff --git a/mysql-test/main/insert.test b/mysql-test/main/insert.test
index 27d44918bbb..b27290bc91c 100644
--- a/mysql-test/main/insert.test
+++ b/mysql-test/main/insert.test
@@ -638,4 +638,13 @@ create table t (a int);
select 1 in (select count(*) from t t1 join (t t2 join t t3 on (t1.a != 0)));
drop table t;
+--echo #
+--echo # MDEV-28578 Server crashes in Item_field::fix_outer_field after CREATE SELECT
+--echo #
+create table t1 (i int) ;
+create table t2 (j int) ;
+--error ER_BAD_FIELD_ERROR
+create table t4 select * from t1 join t2 on (select t3.i);
+drop table t1, t2;
+
--echo # End of 10.4 tests
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index e2e554f6d82..ff91a649310 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -2693,6 +2693,7 @@ create:
lex->create_info.default_table_charset= NULL;
lex->name= null_clex_str;
lex->create_last_non_select_table= lex->last_table();
+ lex->inc_select_stack_outer_barrier();
}
create_body
{