Loading mysql-test/r/grant2.result +13 −0 Original line number Diff line number Diff line Loading @@ -356,3 +356,16 @@ insert into mysql.user select * from t1; drop table t1, t2; drop database TESTDB; flush privileges; grant all privileges on test.* to `a@`@localhost; grant execute on * to `a@`@localhost; create table t2 (s1 int); insert into t2 values (1); drop function if exists f2; create function f2 () returns int begin declare v int; select s1 from t2 into v; return v; end// select f2(); f2() 1 drop function f2; drop table t2; REVOKE ALL PRIVILEGES, GRANT OPTION FROM `a@`@localhost; mysql-test/t/grant2.test +25 −0 Original line number Diff line number Diff line Loading @@ -465,3 +465,28 @@ drop table t1, t2; drop database TESTDB; flush privileges; # # BUG#13310 incorrect user parsing by SP # grant all privileges on test.* to `a@`@localhost; grant execute on * to `a@`@localhost; connect (bug13310,localhost,'a@',,test); connection bug13310; create table t2 (s1 int); insert into t2 values (1); --disable_warnings drop function if exists f2; --enable_warnings delimiter //; create function f2 () returns int begin declare v int; select s1 from t2 into v; return v; end// delimiter ;// select f2(); drop function f2; drop table t2; disconnect bug13310; connection default; REVOKE ALL PRIVILEGES, GRANT OPTION FROM `a@`@localhost; sql/sql_parse.cc +12 −3 Original line number Diff line number Diff line Loading @@ -992,6 +992,7 @@ static int check_connection(THD *thd) char *user= end; char *passwd= strend(user)+1; uint user_len= passwd - 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 Loading @@ -1017,11 +1018,19 @@ static int check_connection(THD *thd) db= db_buff; } user_buff[copy_and_convert(user_buff, sizeof(user_buff)-1, system_charset_info, user, strlen(user), user_buff[user_len= copy_and_convert(user_buff, sizeof(user_buff)-1, system_charset_info, user, user_len, thd->charset(), &dummy_errors)]= '\0'; user= user_buff; /* If username starts and ends in "'", chop them off */ if (user_len > 1 && user[0] == '\'' && user[user_len - 1] == '\'') { user[user_len-1]= 0; user++; user_len-= 2; } if (thd->main_security_ctx.user) x_free(thd->main_security_ctx.user); if (!(thd->main_security_ctx.user= my_strdup(user, MYF(0)))) Loading Loading
mysql-test/r/grant2.result +13 −0 Original line number Diff line number Diff line Loading @@ -356,3 +356,16 @@ insert into mysql.user select * from t1; drop table t1, t2; drop database TESTDB; flush privileges; grant all privileges on test.* to `a@`@localhost; grant execute on * to `a@`@localhost; create table t2 (s1 int); insert into t2 values (1); drop function if exists f2; create function f2 () returns int begin declare v int; select s1 from t2 into v; return v; end// select f2(); f2() 1 drop function f2; drop table t2; REVOKE ALL PRIVILEGES, GRANT OPTION FROM `a@`@localhost;
mysql-test/t/grant2.test +25 −0 Original line number Diff line number Diff line Loading @@ -465,3 +465,28 @@ drop table t1, t2; drop database TESTDB; flush privileges; # # BUG#13310 incorrect user parsing by SP # grant all privileges on test.* to `a@`@localhost; grant execute on * to `a@`@localhost; connect (bug13310,localhost,'a@',,test); connection bug13310; create table t2 (s1 int); insert into t2 values (1); --disable_warnings drop function if exists f2; --enable_warnings delimiter //; create function f2 () returns int begin declare v int; select s1 from t2 into v; return v; end// delimiter ;// select f2(); drop function f2; drop table t2; disconnect bug13310; connection default; REVOKE ALL PRIVILEGES, GRANT OPTION FROM `a@`@localhost;
sql/sql_parse.cc +12 −3 Original line number Diff line number Diff line Loading @@ -992,6 +992,7 @@ static int check_connection(THD *thd) char *user= end; char *passwd= strend(user)+1; uint user_len= passwd - 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 Loading @@ -1017,11 +1018,19 @@ static int check_connection(THD *thd) db= db_buff; } user_buff[copy_and_convert(user_buff, sizeof(user_buff)-1, system_charset_info, user, strlen(user), user_buff[user_len= copy_and_convert(user_buff, sizeof(user_buff)-1, system_charset_info, user, user_len, thd->charset(), &dummy_errors)]= '\0'; user= user_buff; /* If username starts and ends in "'", chop them off */ if (user_len > 1 && user[0] == '\'' && user[user_len - 1] == '\'') { user[user_len-1]= 0; user++; user_len-= 2; } if (thd->main_security_ctx.user) x_free(thd->main_security_ctx.user); if (!(thd->main_security_ctx.user= my_strdup(user, MYF(0)))) Loading