MDEV-36469 don't check is_infoschema_db for null db
The is_infoschema_db is a deep character set based comparision. In in many cases the db is still an empty structure. Doing this comparion early prevents a UBSAN error by not performing character set operations on a null pointer.
This commit is contained in:
parent
bb1d88b6dc
commit
db5bb6f333
@ -165,6 +165,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
class Lex_ident_db: public Lex_ident_fs
|
class Lex_ident_db: public Lex_ident_fs
|
||||||
{
|
{
|
||||||
|
public:
|
||||||
bool is_null() const
|
bool is_null() const
|
||||||
{
|
{
|
||||||
return length == 0 && str == NULL;
|
return length == 0 && str == NULL;
|
||||||
@ -174,7 +175,6 @@ class Lex_ident_db: public Lex_ident_fs
|
|||||||
{
|
{
|
||||||
return length == 0 && str != NULL;
|
return length == 0 && str != NULL;
|
||||||
}
|
}
|
||||||
public:
|
|
||||||
static bool check_name(const LEX_CSTRING &str);
|
static bool check_name(const LEX_CSTRING &str);
|
||||||
static bool check_name_with_error(const LEX_CSTRING &str);
|
static bool check_name_with_error(const LEX_CSTRING &str);
|
||||||
public:
|
public:
|
||||||
|
@ -8111,7 +8111,8 @@ TABLE_LIST *st_select_lex::add_table_to_list(THD *thd,
|
|||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
else
|
else
|
||||||
fqtn= FALSE;
|
fqtn= FALSE;
|
||||||
bool info_schema= is_infoschema_db(&db);
|
bool info_schema= (db.is_null() || db.is_empty())
|
||||||
|
? false : is_infoschema_db(&db);
|
||||||
if (!table->sel && info_schema &&
|
if (!table->sel && info_schema &&
|
||||||
(table_options & TL_OPTION_UPDATING) &&
|
(table_options & TL_OPTION_UPDATING) &&
|
||||||
/* Special cases which are processed by commands itself */
|
/* Special cases which are processed by commands itself */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user