Commit ae7974b1 authored by unknown's avatar unknown
Browse files

Bug#11835 CREATE FUNCTION crashes server

 - Update for 5.1
 - Add "have_dlopen"
 - Remove requirement to load udf's only in "opt_plugin_dir" 


include/my_global.h:
  Remove duplicate defines
mysql-test/include/have_udf.inc:
  Use "have_dlopen" to check if we "have udf"
mysql-test/r/have_udf.require:
  Use "have_dlopen" to check if we "have udf"
mysql-test/r/udf.result:
  Update for new error message "function"->"symbol"
sql/item_func.cc:
  Remove "evil" dbug printour that checks args[0] even if arg_count is 0
sql/mysql_priv.h:
  Add "have_dlopen"
sql/mysqld.cc:
  Add "have_dlopen"
  Move HAVE_DLOPEN defined to only surround "udf_free" and "udf_init"
sql/set_var.cc:
  Add "have_dlopen"
sql/sql_plugin.cc:
  Surround 'dlclose' with HAVE_DLOPEN
sql/sql_udf.cc:
  Remove the requirement to load udf's only from "opt_plugin_dir".
  Fix spelling error
parent b16a2fef
Loading
Loading
Loading
Loading
+0 −9
Original line number Diff line number Diff line
@@ -1443,13 +1443,4 @@ do { doubleget_union _tmp; \
#define dlerror() ""
#endif

/* FreeBSD 2.2.2 does not define RTLD_NOW) */
#ifndef RTLD_NOW
#define RTLD_NOW 1
#endif

#ifndef HAVE_DLERROR
#define dlerror() ""
#endif

#endif /* my_global_h */
+5 −9
Original line number Diff line number Diff line
#
# To check if the udf_example.so is available,
# try to load one function from it.
#
# Check if server has support for loading udf's
# i.e it will support dlopen
#
--require r/have_udf.require
--disable_abort_on_error
CREATE FUNCTION metaphon RETURNS STRING SONAME 'udf_example.so';
--disable_query_log
DROP FUNCTION metaphon;
--enable_query_log
--enable_abort_on_error
disable_query_log;
show variables like "have_dlopen";
enable_query_log;
+2 −1
Original line number Diff line number Diff line
CREATE FUNCTION metaphon RETURNS STRING SONAME 'udf_example.so';
Variable_name	Value
have_dlopen	YES
+1 −1
Original line number Diff line number Diff line
@@ -2,7 +2,7 @@ drop table if exists t1;
CREATE FUNCTION metaphon RETURNS STRING SONAME 'udf_example.so';
CREATE FUNCTION myfunc_double RETURNS REAL SONAME 'udf_example.so';
CREATE FUNCTION myfunc_nonexist RETURNS INTEGER SONAME 'udf_example.so';
ERROR HY000: Can't find function 'myfunc_nonexist' in library
ERROR HY000: Can't find symbol 'myfunc_nonexist' in library
CREATE FUNCTION myfunc_int RETURNS INTEGER SONAME 'udf_example.so';
CREATE FUNCTION sequence RETURNS INTEGER SONAME "udf_example.so";
CREATE FUNCTION lookup RETURNS STRING SONAME 'udf_example.so';
+0 −3
Original line number Diff line number Diff line
@@ -2807,9 +2807,6 @@ longlong Item_func_udf_int::val_int()
{
  DBUG_ASSERT(fixed == 1);
  DBUG_ENTER("Item_func_udf_int::val_int");
  DBUG_PRINT("info",("result_type: %d  arg_count: %d",
		     args[0]->result_type(), arg_count));

  DBUG_RETURN(udf.val_int(&null_value));
}

Loading