Loading mysql-test/r/create.result +2 −0 Original line number Diff line number Diff line Loading @@ -1559,6 +1559,8 @@ SHOW INDEX FROM t1; Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment t1 1 c1 1 c1 A NULL NULL NULL YES BTREE DROP TABLE t1; create user mysqltest_1@'test@test'; ERROR HY000: Malformed hostname (illegal symbol: '@') CREATE TABLE t1 (a INTEGER AUTO_INCREMENT PRIMARY KEY, b INTEGER NOT NULL); INSERT IGNORE INTO t1 (b) VALUES (5); CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY) Loading mysql-test/t/create.test +5 −0 Original line number Diff line number Diff line Loading @@ -1175,6 +1175,11 @@ CREATE TABLE t1(c1 VARCHAR(33), KEY USING HASH (c1) USING BTREE) ENGINE=MEMORY; SHOW INDEX FROM t1; DROP TABLE t1; # # Bug#35924 DEFINER should be stored 'quoted' in I_S # --error ER_UNKNOWN_ERROR create user mysqltest_1@'test@test'; # # Bug#38821: Assert table->auto_increment_field_not_null failed in open_table() Loading sql/mysql_priv.h +1 −0 Original line number Diff line number Diff line Loading @@ -803,6 +803,7 @@ bool check_string_byte_length(LEX_STRING *str, const char *err_msg, bool check_string_char_length(LEX_STRING *str, const char *err_msg, uint max_char_length, CHARSET_INFO *cs, bool no_error); bool check_host_name(LEX_STRING *str); bool parse_sql(THD *thd, Parser_state *parser_state, Loading sql/sql_parse.cc +33 −0 Original line number Diff line number Diff line Loading @@ -7503,6 +7503,39 @@ int test_if_data_home_dir(const char *dir) C_MODE_END /** Check that host name string is valid. @param[in] str string to be checked @return Operation status @retval FALSE host name is ok @retval TRUE host name string is longer than max_length or has invalid symbols */ bool check_host_name(LEX_STRING *str) { const char *name= str->str; const char *end= str->str + str->length; if (check_string_byte_length(str, ER(ER_HOSTNAME), HOSTNAME_LENGTH)) return TRUE; while (name != end) { if (*name == '@') { my_printf_error(ER_UNKNOWN_ERROR, "Malformed hostname (illegal symbol: '%c')", MYF(0), *name); return TRUE; } name++; } return FALSE; } extern int MYSQLparse(void *thd); // from sql_yacc.cc Loading sql/sql_yacc.yy +1 −2 Original line number Diff line number Diff line Loading @@ -11301,8 +11301,7 @@ user: if (check_string_char_length(&$$->user, ER(ER_USERNAME), USERNAME_CHAR_LENGTH, system_charset_info, 0) || check_string_byte_length(&$$->host, ER(ER_HOSTNAME), HOSTNAME_LENGTH)) check_host_name(&$$->host)) MYSQL_YYABORT; } | CURRENT_USER optional_braces Loading Loading
mysql-test/r/create.result +2 −0 Original line number Diff line number Diff line Loading @@ -1559,6 +1559,8 @@ SHOW INDEX FROM t1; Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment t1 1 c1 1 c1 A NULL NULL NULL YES BTREE DROP TABLE t1; create user mysqltest_1@'test@test'; ERROR HY000: Malformed hostname (illegal symbol: '@') CREATE TABLE t1 (a INTEGER AUTO_INCREMENT PRIMARY KEY, b INTEGER NOT NULL); INSERT IGNORE INTO t1 (b) VALUES (5); CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY) Loading
mysql-test/t/create.test +5 −0 Original line number Diff line number Diff line Loading @@ -1175,6 +1175,11 @@ CREATE TABLE t1(c1 VARCHAR(33), KEY USING HASH (c1) USING BTREE) ENGINE=MEMORY; SHOW INDEX FROM t1; DROP TABLE t1; # # Bug#35924 DEFINER should be stored 'quoted' in I_S # --error ER_UNKNOWN_ERROR create user mysqltest_1@'test@test'; # # Bug#38821: Assert table->auto_increment_field_not_null failed in open_table() Loading
sql/mysql_priv.h +1 −0 Original line number Diff line number Diff line Loading @@ -803,6 +803,7 @@ bool check_string_byte_length(LEX_STRING *str, const char *err_msg, bool check_string_char_length(LEX_STRING *str, const char *err_msg, uint max_char_length, CHARSET_INFO *cs, bool no_error); bool check_host_name(LEX_STRING *str); bool parse_sql(THD *thd, Parser_state *parser_state, Loading
sql/sql_parse.cc +33 −0 Original line number Diff line number Diff line Loading @@ -7503,6 +7503,39 @@ int test_if_data_home_dir(const char *dir) C_MODE_END /** Check that host name string is valid. @param[in] str string to be checked @return Operation status @retval FALSE host name is ok @retval TRUE host name string is longer than max_length or has invalid symbols */ bool check_host_name(LEX_STRING *str) { const char *name= str->str; const char *end= str->str + str->length; if (check_string_byte_length(str, ER(ER_HOSTNAME), HOSTNAME_LENGTH)) return TRUE; while (name != end) { if (*name == '@') { my_printf_error(ER_UNKNOWN_ERROR, "Malformed hostname (illegal symbol: '%c')", MYF(0), *name); return TRUE; } name++; } return FALSE; } extern int MYSQLparse(void *thd); // from sql_yacc.cc Loading
sql/sql_yacc.yy +1 −2 Original line number Diff line number Diff line Loading @@ -11301,8 +11301,7 @@ user: if (check_string_char_length(&$$->user, ER(ER_USERNAME), USERNAME_CHAR_LENGTH, system_charset_info, 0) || check_string_byte_length(&$$->host, ER(ER_HOSTNAME), HOSTNAME_LENGTH)) check_host_name(&$$->host)) MYSQL_YYABORT; } | CURRENT_USER optional_braces Loading