diff --git a/mysql-test/suite/sql_sequence/view.result b/mysql-test/suite/sql_sequence/view.result index bd773dcc042..0f39a637deb 100644 --- a/mysql-test/suite/sql_sequence/view.result +++ b/mysql-test/suite/sql_sequence/view.result @@ -24,3 +24,13 @@ ERROR 42S02: 'test.v1' is not a SEQUENCE SELECT PREVIOUS VALUE FOR v1; ERROR 42S02: 'test.v1' is not a SEQUENCE drop view v1; +# +# MDEV 17978 Server crashes in mysqld_show_create_get_fields +# upon SHOW CREATE SEQUENCE on a broken view +# +CREATE TABLE t1 (a INT); +CREATE VIEW v1 AS SELECT * FROM t1; +DROP TABLE t1; +SHOW CREATE SEQUENCE v1; +ERROR 42S02: 'test.v1' is not a SEQUENCE +DROP VIEW v1; diff --git a/mysql-test/suite/sql_sequence/view.test b/mysql-test/suite/sql_sequence/view.test index fe968604b5b..5b970432a34 100644 --- a/mysql-test/suite/sql_sequence/view.test +++ b/mysql-test/suite/sql_sequence/view.test @@ -27,3 +27,14 @@ SELECT NEXT VALUE FOR v1; --error ER_NOT_SEQUENCE SELECT PREVIOUS VALUE FOR v1; drop view v1; + +--echo # +--echo # MDEV 17978 Server crashes in mysqld_show_create_get_fields +--echo # upon SHOW CREATE SEQUENCE on a broken view +--echo # +CREATE TABLE t1 (a INT); +CREATE VIEW v1 AS SELECT * FROM t1; +DROP TABLE t1; +--error ER_NOT_SEQUENCE +SHOW CREATE SEQUENCE v1; +DROP VIEW v1; diff --git a/sql/sql_show.cc b/sql/sql_show.cc index a853d3df6f6..85e915bb65a 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -1316,7 +1316,8 @@ mysqld_show_create_get_fields(THD *thd, TABLE_LIST *table_list, goto exit; } else if (lex->table_type == TABLE_TYPE_SEQUENCE && - table_list->table->s->table_type != TABLE_TYPE_SEQUENCE) + (!table_list->table || + table_list->table->s->table_type != TABLE_TYPE_SEQUENCE)) { my_error(ER_NOT_SEQUENCE, MYF(0), table_list->db.str, table_list->table_name.str);