diff options
author | Rucha Deodhar <rucha.deodhar@mariadb.com> | 2021-04-30 23:14:57 +0530 |
---|---|---|
committer | Rucha Deodhar <rucha.deodhar@mariadb.com> | 2021-05-20 09:45:27 +0530 |
commit | 629449172a5b0a6975663ca1ac420789e00b941d (patch) | |
tree | 05c0986e390cb07ecd0b55f25c7531bcbaadfba6 /sql/sql_view.cc | |
parent | 406ce57232aac5c65bf0591078f36c4c56b19c95 (diff) | |
download | mariadb-git-629449172a5b0a6975663ca1ac420789e00b941d.tar.gz |
MDEV-25462: Assertion `m_status == DA_ERROR || m_status == DA_OK ||
m_status == DA_OK_BULK' failed in Diagnostics_area::message from
get_schema_tables_record
Analysis: SET NAMES changes character set for character_set_client,
character_set_connection, character_set_results to 'filename'. The .frm file of view
has @xx sequences in the SELECT query, which give parsing error because 'filename'
character set is not parser friendly. When we get parsing error (ER_PARSE_ERROR), we
directly return true without setting error status. This is caught later in assertion.
Fix: Disallow 'filename' character set in SET NAMES because it is not parser
friendly.
Diffstat (limited to 'sql/sql_view.cc')
-rw-r--r-- | sql/sql_view.cc | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/sql/sql_view.cc b/sql/sql_view.cc index 0701c5233ac..0547a2fe856 100644 --- a/sql/sql_view.cc +++ b/sql/sql_view.cc @@ -879,6 +879,13 @@ static int mysql_register_view(THD *thd, TABLE_LIST *view, LEX *lex= thd->lex; /* + Ensure character set number != 17 (character set = filename) and mbminlen=1 + because these character sets are not parser friendly, which can give weird + sequence in .frm file of view and later give parsing error. + */ + DBUG_ASSERT(thd->charset()->mbminlen == 1 && thd->charset()->number != 17); + + /* View definition query -- a SELECT statement that fully defines view. It is generated from the Item-tree built from the original (specified by the user) query. The idea is that generated query should eliminates all |