diff options
-rw-r--r-- | include/mysql_com.h | 2 | ||||
-rw-r--r-- | mysql-test/r/ctype_utf8.result | 17 | ||||
-rw-r--r-- | mysql-test/t/ctype_utf8.test | 1 | ||||
-rw-r--r-- | sql/sp.cc | 8 | ||||
-rw-r--r-- | sql/sp_head.cc | 6 | ||||
-rw-r--r-- | sql/sql_acl.cc | 10 | ||||
-rw-r--r-- | sql/sql_class.h | 2 | ||||
-rw-r--r-- | sql/sql_parse.cc | 7 | ||||
-rw-r--r-- | sql/sql_repl.h | 2 |
9 files changed, 30 insertions, 25 deletions
diff --git a/include/mysql_com.h b/include/mysql_com.h index eb534cd034d..b1dd6152cf4 100644 --- a/include/mysql_com.h +++ b/include/mysql_com.h @@ -36,7 +36,7 @@ MySQL standard format: user_name_part@host_name_part\0 */ -#define USER_HOST_BUFF_SIZE HOSTNAME_LENGTH + USERNAME_LENGTH + 2 +#define USER_HOST_BUFF_SIZE HOSTNAME_LENGTH + USERNAME_BYTE_LENGTH + 2 #define LOCAL_HOST "localhost" #define LOCAL_HOST_NAMEDPIPE "." diff --git a/mysql-test/r/ctype_utf8.result b/mysql-test/r/ctype_utf8.result index f7baa8b98e5..51f361349e6 100644 --- a/mysql-test/r/ctype_utf8.result +++ b/mysql-test/r/ctype_utf8.result @@ -1341,17 +1341,18 @@ a e drop table t1; set names utf8; -grant select on test.* to ム<8e>ミキミオム<80>_ム<8e>ミキミオム<80>@localhost; +grant select on test.* to ム社キミオム_ム社キミオム@localhost; user() -ム<8e>ミキミオム<80>_ム<8e>ミキミオム<80>@localhost -revoke all on test.* from ム<8e>ミキミオム<80>_ム<8e>ミキミオム<80>@localhost; -drop user ム<8e>ミキミオム<80>_ム<8e>ミキミオム<80>@localhost; -create database ミクミシム<8f>_ミアミーミキム<8b>_ミイ_ミコミセミエミクム<80>ミセミイミコミオ_ム<83>ム<82>ム<84>8_ミエミサミクミスミセミケ_ミアミセミサム<8c>ム<88>ミオ_ム<87>ミオミシ_45; -use ミクミシム<8f>_ミアミーミキム<8b>_ミイ_ミコミセミエミクム<80>ミセミイミコミオ_ム<83>ム<82>ム<84>8_ミエミサミクミスミセミケ_ミアミセミサム<8c>ム<88>ミオ_ム<87>ミオミシ_45; +ム社キミオム_ム社キミオム@localhost +revoke all on test.* from ム社キミオム_ム社キミオム@localhost; +drop user ム社キミオム_ム社キミオム@localhost; +create database ミクミシム柔ミアミーミキム祇ミイ_ミコミセミエミクムミセミイミコミオ_ムτび8_ミエミサミクミスミセミケ_ミアミセミサム袴威オ_ムミオミシ_45; +use ミクミシム柔ミアミーミキム祇ミイ_ミコミセミエミクムミセミイミコミオ_ムτび8_ミエミサミクミスミセミケ_ミアミセミサム袴威オ_ムミオミシ_45; select database(); database() -ミクミシム<8f>_ミアミーミキム<8b>_ミイ_ミコミセミエミクム<80>ミセミイミコミオ_ム<83>ム<82>ム<84>8_ミエミサミクミスミセミケ_ミアミセミサム<8c>ム<88>ミオ_ム<87>ミオミシ_45 -drop database ミクミシム<8f>_ミアミーミキム<8b>_ミイ_ミコミセミエミクム<80>ミセミイミコミオ_ム<83>ム<82>ム<84>8_ミエミサミクミスミセミケ_ミアミセミサム<8c>ム<88>ミオ_ム<87>ミオミシ_45; +ミクミシム柔ミアミーミキム祇ミイ_ミコミセミエミクムミセミイミコミオ_ムτび8_ミエミサミクミスミセミケ_ミアミセミサム袴威オ_ムミオミシ_45 +drop database ミクミシム柔ミアミーミキム祇ミイ_ミコミセミエミクムミセミイミコミオ_ムτび8_ミエミサミクミスミセミケ_ミアミセミサム袴威オ_ムミオミシ_45; +use test; CREATE TABLE t1(id varchar(20) NOT NULL) DEFAULT CHARSET=utf8; INSERT INTO t1 VALUES ('xxx'), ('aa'), ('yyy'), ('aa'); SELECT id FROM t1; diff --git a/mysql-test/t/ctype_utf8.test b/mysql-test/t/ctype_utf8.test index e6f939abdcd..b6137d5f084 100644 --- a/mysql-test/t/ctype_utf8.test +++ b/mysql-test/t/ctype_utf8.test @@ -1084,6 +1084,7 @@ create database ミクミシム柔ミアミーミキム祇ミイ_ミコミセミエミクムミセミイミコミオ_ムτび8_ミエミサミクミスミセミケ_ミアミセミ use ミクミシム柔ミアミーミキム祇ミイ_ミコミセミエミクムミセミイミコミオ_ムτび8_ミエミサミクミスミセミケ_ミアミセミサム袴威オ_ムミオミシ_45; select database(); drop database ミクミシム柔ミアミーミキム祇ミイ_ミコミセミエミクムミセミイミコミオ_ムτび8_ミエミサミクミスミセミケ_ミアミセミサム袴威オ_ムミオミシ_45; +use test; # End of 4.1 tests diff --git a/sql/sp.cc b/sql/sp.cc index fc72822c15e..63175b110fa 100644 --- a/sql/sp.cc +++ b/sql/sp.cc @@ -404,16 +404,16 @@ db_load_routine(THD *thd, int type, sp_name *name, sp_head **sphp, { LEX *old_lex= thd->lex, newlex; String defstr; - char old_db_buf[NAME_LEN+1]; + char old_db_buf[NAME_BYTE_LEN+1]; LEX_STRING old_db= { old_db_buf, sizeof(old_db_buf) }; bool dbchanged; ulong old_sql_mode= thd->variables.sql_mode; ha_rows old_select_limit= thd->variables.select_limit; sp_rcontext *old_spcont= thd->spcont; - char definer_user_name_holder[USERNAME_LENGTH + 1]; + char definer_user_name_holder[USERNAME_BYTE_LENGTH + 1]; LEX_STRING_WITH_INIT definer_user_name(definer_user_name_holder, - USERNAME_LENGTH); + USERNAME_BYTE_LENGTH); char definer_host_name_holder[HOSTNAME_LENGTH + 1]; LEX_STRING_WITH_INIT definer_host_name(definer_host_name_holder, @@ -511,7 +511,7 @@ db_create_routine(THD *thd, int type, sp_head *sp) int ret; TABLE *table; char definer[USER_HOST_BUFF_SIZE]; - char old_db_buf[NAME_LEN+1]; + char old_db_buf[NAME_BYTE_LEN+1]; LEX_STRING old_db= { old_db_buf, sizeof(old_db_buf) }; bool dbchanged; DBUG_ENTER("db_create_routine"); diff --git a/sql/sp_head.cc b/sql/sp_head.cc index 9761de625be..e5b0b1e606e 100644 --- a/sql/sp_head.cc +++ b/sql/sp_head.cc @@ -924,7 +924,7 @@ bool sp_head::execute(THD *thd) { DBUG_ENTER("sp_head::execute"); - char old_db_buf[NAME_LEN+1]; + char old_db_buf[NAME_BYTE_LEN+1]; LEX_STRING old_db= { old_db_buf, sizeof(old_db_buf) }; bool dbchanged; sp_rcontext *ctx; @@ -1957,8 +1957,8 @@ sp_head::set_info(longlong created, longlong modified, void sp_head::set_definer(const char *definer, uint definerlen) { - char user_name_holder[USERNAME_LENGTH + 1]; - LEX_STRING_WITH_INIT user_name(user_name_holder, USERNAME_LENGTH); + char user_name_holder[USERNAME_BYTE_LENGTH + 1]; + LEX_STRING_WITH_INIT user_name(user_name_holder, USERNAME_BYTE_LENGTH); char host_name_holder[HOSTNAME_LENGTH + 1]; LEX_STRING_WITH_INIT host_name(host_name_holder, HOSTNAME_LENGTH); diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index e97985fbd45..010a5c33b96 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -54,7 +54,7 @@ static byte* acl_entry_get_key(acl_entry *entry,uint *length, } #define IP_ADDR_STRLEN (3+1+3+1+3+1+3) -#define ACL_KEY_LENGTH (IP_ADDR_STRLEN+1+NAME_LEN+1+USERNAME_LENGTH+1) +#define ACL_KEY_LENGTH (IP_ADDR_STRLEN+1+NAME_BYTE_LEN+1+USERNAME_BYTE_LENGTH+1) static DYNAMIC_ARRAY acl_hosts,acl_users,acl_dbs; static MEM_ROOT mem, memex; @@ -197,7 +197,7 @@ static my_bool acl_load(THD *thd, TABLE_LIST *tables) READ_RECORD read_record_info; my_bool return_val= 1; bool check_no_resolve= specialflag & SPECIAL_NO_RESOLVE; - char tmp_name[NAME_LEN+1]; + char tmp_name[NAME_BYTE_LEN+1]; int password_length; DBUG_ENTER("acl_load"); @@ -2264,7 +2264,7 @@ static GRANT_NAME *name_hash_search(HASH *name_hash, const char *user, const char *tname, bool exact) { - char helping [NAME_LEN*2+USERNAME_LENGTH+3]; + char helping [NAME_BYTE_LEN*2+USERNAME_BYTE_LENGTH+3]; uint len; GRANT_NAME *grant_name,*found=0; HASH_SEARCH_STATE state; @@ -3167,7 +3167,7 @@ bool mysql_grant(THD *thd, const char *db, List <LEX_USER> &list, { List_iterator <LEX_USER> str_list (list); LEX_USER *Str, *tmp_Str; - char tmp_db[NAME_LEN+1]; + char tmp_db[NAME_BYTE_LEN+1]; bool create_new_users=0; TABLE_LIST tables[2]; DBUG_ENTER("mysql_grant"); @@ -3867,7 +3867,7 @@ err2: bool check_grant_db(THD *thd,const char *db) { Security_context *sctx= thd->security_ctx; - char helping [NAME_LEN+USERNAME_LENGTH+2]; + char helping [NAME_BYTE_LEN+USERNAME_BYTE_LENGTH+2]; uint len; bool error= 1; diff --git a/sql/sql_class.h b/sql/sql_class.h index 039c133e885..ed9f4b57f56 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -200,7 +200,7 @@ class MYSQL_LOG: public TC_LOG IO_CACHE log_file; IO_CACHE index_file; char *name; - char time_buff[20],db[NAME_LEN+1]; + char time_buff[20],db[NAME_BYTE_LEN+1]; char log_file_name[FN_REFLEN],index_file_name[FN_REFLEN]; /* The max size before rotation (usable only if log_type == LOG_BIN: binary diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index bb969a77d89..a88eac84865 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1662,7 +1662,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd, password. New clients send the size (1 byte) + string (not null terminated, so also '\0' for empty string). */ - char db_buff[NAME_LEN+1]; // buffer to store db in utf8 + char db_buff[NAME_BYTE_LEN+1]; // buffer to store db in utf8 char *db= passwd; uint passwd_len= thd->client_capabilities & CLIENT_SECURE_CONNECTION ? *passwd++ : strlen(passwd); @@ -7564,7 +7564,10 @@ LEX_USER *get_current_user(THD *thd, LEX_USER *user) bool check_string_length(LEX_STRING *str, const char *err_msg, uint max_length) { - if (str->length <= max_length) + + if (system_charset_info->cset->charpos(system_charset_info, str->str, + str->str + str->length, max_length) >= + str->length) return FALSE; my_error(ER_WRONG_STRING_LENGTH, MYF(0), str->str, err_msg, max_length); diff --git a/sql/sql_repl.h b/sql/sql_repl.h index 9eb6456ee20..6b1e5e6b447 100644 --- a/sql/sql_repl.h +++ b/sql/sql_repl.h @@ -22,7 +22,7 @@ typedef struct st_slave_info uint32 server_id; uint32 rpl_recovery_rank, master_id; char host[HOSTNAME_LENGTH+1]; - char user[USERNAME_LENGTH+1]; + char user[USERNAME_BYTE_LENGTH+1]; char password[MAX_PASSWORD_LENGTH+1]; uint16 port; THD* thd; |