diff options
author | unknown <cmiller@zippy.cornsilk.net> | 2008-03-05 09:33:32 -0500 |
---|---|---|
committer | unknown <cmiller@zippy.cornsilk.net> | 2008-03-05 09:33:32 -0500 |
commit | 2b7dda9e9d06f2ab6036da39250a765926c9c437 (patch) | |
tree | 67a859a3e544f564207c248ced593901dcb13c79 /mysql-test/t/drop.test | |
parent | 6262c056fa8cff69073d3f9f58692d64ec4d2b60 (diff) | |
download | mariadb-git-2b7dda9e9d06f2ab6036da39250a765926c9c437.tar.gz |
Bug#33464: DROP FUNCTION caused a crash
The cause of the crash is an assertion failure that we do not emit
an error message (grant not found) and then return "ok". The
assertion is valid, and we were ignoring the buggy behavior prior
to the "Diagnostics" result-verification.
Use an error handler to mutate innocuous missing-grant errors, when
removing routines, into warnings.
mysql-test/r/drop.result:
Show that the crash disappears. Also prepare for the larger bug to
be fixed with only minor changes to this test.
mysql-test/t/drop.test:
Show that the crash disappears. Also prepare for the larger bug to
be fixed with only minor changes to this test.
sql/sql_acl.cc:
Disable a segment of code that makes a faulty assumption
about the existence of a routine's defining user, until that
assumption becomes true.
Push a new handler onto the error-handler stack, so that when
removing a routine, a missing ACL grant is now a warning
instead of an error. If any unexpected error is raised then tell
the caller.
Diffstat (limited to 'mysql-test/t/drop.test')
-rw-r--r-- | mysql-test/t/drop.test | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/mysql-test/t/drop.test b/mysql-test/t/drop.test index a79044436eb..3dd180f2d78 100644 --- a/mysql-test/t/drop.test +++ b/mysql-test/t/drop.test @@ -134,4 +134,66 @@ drop table mysql_test.`#sql-347f_8`; copy_file $MYSQLTEST_VARDIR/master-data/mysql_test/t1.frm $MYSQLTEST_VARDIR/master-data/mysql_test/#sql-347f_6.frm; drop database mysql_test; + +# +# Bug#33464: DROP FUNCTION caused a crash. +# +CREATE DATABASE dbbug33464; +CREATE USER 'userbug33464'@'localhost'; + +GRANT CREATE ROUTINE ON dbbug33464.* TO 'userbug33464'@'localhost'; + +--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK +connect (connbug33464, localhost, userbug33464, , dbbug33464); +--source suite/funcs_1/include/show_connection.inc + +--disable_warnings +DROP PROCEDURE IF EXISTS sp3; +DROP FUNCTION IF EXISTS fn1; +--enable_warnings + +delimiter //; +CREATE PROCEDURE sp3(v1 char(20)) +BEGIN + SELECT * from dbbug33464.t6 where t6.f2= 'xyz'; +END// +delimiter ;// + +delimiter //; +CREATE FUNCTION fn1() returns char(50) SQL SECURITY INVOKER +BEGIN + return 1; +END// +delimiter ;// + +delimiter //; +CREATE FUNCTION fn2() returns char(50) SQL SECURITY DEFINER +BEGIN + return 2; +END// +delimiter ;// + +disconnect connbug33464; + +# cleanup +connection default; +USE dbbug33464; +--source suite/funcs_1/include/show_connection.inc + +SELECT fn1(); +SELECT fn2(); + +--error 0, ER_CANNOT_USER +DROP USER 'userbug33464'@'localhost'; + +DROP FUNCTION fn1; +DROP FUNCTION fn2; +DROP PROCEDURE sp3; + +--error 0, ER_CANNOT_USER +DROP USER 'userbug33464'@'localhost'; + +use test; +DROP DATABASE dbbug33464; + --echo End of 5.1 tests |