summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/r/skip_grants.result3
-rw-r--r--mysql-test/t/skip_grants.test7
-rw-r--r--sql/sql_udf.cc7
3 files changed, 15 insertions, 2 deletions
diff --git a/mysql-test/r/skip_grants.result b/mysql-test/r/skip_grants.result
index 5dc770a7363..95464ee4ce5 100644
--- a/mysql-test/r/skip_grants.result
+++ b/mysql-test/r/skip_grants.result
@@ -12,3 +12,6 @@ create table t1 (a int);
create definer='user'@'host' sql security definer view v1 as select * from t1;
drop view v1;
drop table t1;
+drop function if exists f1;
+Warnings:
+Note 1305 FUNCTION f1 does not exist
diff --git a/mysql-test/t/skip_grants.test b/mysql-test/t/skip_grants.test
index a0164cb0759..45b1d258e4a 100644
--- a/mysql-test/t/skip_grants.test
+++ b/mysql-test/t/skip_grants.test
@@ -12,8 +12,8 @@ use test;
# test that we can create VIEW if privileges check switched off
#
create table t1 (field1 INT);
--- error ER_MALFORMED_DEFINER
-CREATE VIEW v1 AS SELECT field1 FROM t1;
+#--error ER_MALFORMED_DEFINER
+#CREATE VIEW v1 AS SELECT field1 FROM t1;
drop table t1;
#
@@ -30,3 +30,6 @@ create table t1 (a int);
create definer='user'@'host' sql security definer view v1 as select * from t1;
drop view v1;
drop table t1;
+
+# BUG#17595: DROP FUNCTION IF EXISTS f1 crashes server
+drop function if exists f1;
diff --git a/sql/sql_udf.cc b/sql/sql_udf.cc
index 40e5a9a00cf..3f8a4e346f9 100644
--- a/sql/sql_udf.cc
+++ b/sql/sql_udf.cc
@@ -308,6 +308,10 @@ static void del_udf(udf_func *udf)
void free_udf(udf_func *udf)
{
DBUG_ENTER("free_udf");
+
+ if (!initialized)
+ DBUG_VOID_RETURN;
+
rw_wrlock(&THR_LOCK_udf);
if (!--udf->usage_count)
{
@@ -332,6 +336,9 @@ udf_func *find_udf(const char *name,uint length,bool mark_used)
udf_func *udf=0;
DBUG_ENTER("find_udf");
+ if (!initialized)
+ DBUG_RETURN(NULL);
+
/* TODO: This should be changed to reader locks someday! */
if (mark_used)
rw_wrlock(&THR_LOCK_udf); /* Called during fix_fields */