diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 678d0890136..465d840e2b8 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -834,6 +834,7 @@ static int check_connection(THD *thd) char *passwd= strend(user)+1; char *db= passwd; char db_buff[NAME_LEN+1]; // buffer to store db in utf8 + char user_buff[USERNAME_LENGTH+1]; // buffer to store user in utf8 /* Old clients send null-terminated string as password; new clients send the size (1 byte) + string (not null-terminated). Hence in case of empty @@ -854,6 +855,14 @@ static int check_connection(THD *thd) db= db_buff; } + if (user) + { + user_buff[copy_and_convert(user_buff, sizeof(user_buff)-1, + system_charset_info, user, strlen(user), + thd->charset())]= '\0'; + user= user_buff; + } + if (thd->user) x_free(thd->user); if (!(thd->user= my_strdup(user, MYF(0))))