Commit 51316b01 authored by unknown's avatar unknown
Browse files

Fixes bug #17595. UDFs are not initialized when running mysqld with

--skip-grant-tables. However when deleting functions UDFs list was checked
regardless of whther UDFs are initialized or not. Additional check is added
into free_udf() and find_udf() functions to prevent possible runtime errors.


mysql-test/r/skip_grants.result:
  Test result for #17595 patch.
mysql-test/t/skip_grants.test:
  Test for #17595 patch.
parent b97082c5
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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
+5 −2
Original line number Diff line number Diff line
@@ -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;
+7 −0
Original line number Diff line number Diff line
@@ -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 */