MySQL Lists are EOL. Please join:

List:Commits« Previous MessageNext Message »
From:msvensson Date:March 10 2006 9:41am
Subject:bk commit into 5.0 tree (msvensson:1.2050) BUG#17261
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of msvensson. When msvensson does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet
  1.2050 06/03/10 10:41:04 msvensson@stripped +7 -0
  Bug#17261  Passing a variable from a stored procedure to UDF crashes mysqld
   - Update of test toolsand Makefiles to make it possible to test always test udf's as part 
  of the mysql test suite

  sql/udf_example.cc
    1.20 06/03/10 10:41:00 msvensson@stripped +6 -4
    Use isalpha instade of my_isalpha

  sql/sql_udf.cc
    1.55 06/03/10 10:41:00 msvensson@stripped +1 -0
    Add DBUG_PRINT just before dl_open

  sql/share/errmsg.txt
    1.59 06/03/10 10:41:00 msvensson@stripped +38 -38
    Update the max length of %s string from 64 to 128

  sql/Makefile.am
    1.115 06/03/10 10:41:00 msvensson@stripped +6 -4
    Build shared library udf_example.so

  mysql-test/t/udf.test
    1.2 06/03/10 10:41:00 msvensson@stripped +19 -11
    Update tests
    The "--error 0" directives should actually be changed to the correct error number returned but that error  number is lost. W e do however get the right error message and that is checked in 
    the .result file.

  mysql-test/r/udf.result
    1.2 06/03/10 10:41:00 msvensson@stripped +5 -5
    Update test results

  mysql-test/mysql-test-run.pl
    1.70 06/03/10 10:41:00 msvensson@stripped +8 -0
    Add the path where mysqld will udf_example.so used by the udf test

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	msvensson
# Host:	devsrv-b.mysql.com
# Root:	/space/magnus/bug17261/my50-bug17261

--- 1.114/sql/Makefile.am	2006-01-11 00:07:34 +01:00
+++ 1.115/sql/Makefile.am	2006-03-10 10:41:00 +01:00
@@ -153,10 +153,12 @@
 lex_hash.h:	gen_lex_hash$(EXEEXT)
 		./gen_lex_hash$(EXEEXT) > $@
 
-# For testing of udf_example.so;  Works on platforms with gcc
-# (This is not part of our build process but only provided as an example)
-udf_example.so:	udf_example.cc
-		$(CXXCOMPILE) -shared -o $@ $<
+# For testing of udf_example.so
+noinst_LTLIBRARIES= udf_example.la
+udf_example_la_SOURCES= udf_example.cc
+udf_example_la_CXXFLAGS= -DSTANDARD
+udf_example_la_LDFLAGS= -module -rpath $(pkglibdir)
+
 
 # Don't update the files from bitkeeper
 %::SCCS/s.%

--- 1.54/sql/sql_udf.cc	2005-11-23 19:18:04 +01:00
+++ 1.55/sql/sql_udf.cc	2006-03-10 10:41:00 +01:00
@@ -432,6 +432,7 @@
   }
   if (!(dl = find_udf_dl(udf->dl)))
   {
+    DBUG_PRINT("info", ("Calling dlopen, udf->dl: %s", udf->dl));
     if (!(dl = dlopen(udf->dl, RTLD_NOW)))
     {
       DBUG_PRINT("error",("dlopen of %s failed, error: %d (%s)",

--- 1.19/sql/udf_example.cc	2006-02-15 17:11:19 +01:00
+++ 1.20/sql/udf_example.cc	2006-03-10 10:41:00 +01:00
@@ -113,6 +113,8 @@
 */
 
 #ifdef STANDARD
+/* STANDARD is defined, don't use any mysql functions */
+#include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
 #ifdef __WIN__
@@ -125,10 +127,10 @@
 #else
 #include <my_global.h>
 #include <my_sys.h>
+#include <m_string.h>		// To get strmov()
 #endif
 #include <mysql.h>
-#include <m_ctype.h>
-#include <m_string.h>		// To get strmov()
+#include <ctype.h>
 
 static pthread_mutex_t LOCK_hostname;
 
@@ -289,8 +291,8 @@
 
   for (n = ntrans + 1, n_end = ntrans + sizeof(ntrans)-2;
 	word != w_end && n < n_end; word++ )
-    if ( my_isalpha ( &my_charset_latin1, *word ))
-      *n++ = my_toupper ( &my_charset_latin1, *word );
+    if ( isalpha ( *word ))
+      *n++ = toupper ( *word );
 
   if ( n == ntrans + 1 )	/* return empty string if 0 bytes */
   {

--- 1.58/sql/share/errmsg.txt	2006-01-19 11:48:02 +01:00
+++ 1.59/sql/share/errmsg.txt	2006-03-10 10:41:00 +01:00
@@ -2978,23 +2978,23 @@
 	swe "Funktionen '%-.64s' finns redan"
 ER_CANT_OPEN_LIBRARY  
-	nla "Kan shared library '%-.64s' niet openen (Errcode: %d %s)"
-	eng "Can't open shared library '%-.64s' (errno: %d %-.64s)"
-	est "Ei suuda avada jagatud teeki '%-.64s' (veakood: %d %-.64s)"
-	hun "A(z) '%-.64s' megosztott konyvtar nem hasznalhato (hibakod: %d %s)"
-	ita "Impossibile aprire la libreria condivisa '%-.64s' (errno: %d %s)"
-	nor "Can't open shared library '%-.64s' (errno: %d %s)"
-	norwegian-ny "Can't open shared library '%-.64s' (errno: %d %s)"
-	pol "Can't open shared library '%-.64s' (errno: %d %s)"
+	nla "Kan shared library '%-.64s' niet openen (Errcode: %d %-.128s)"
+	eng "Can't open shared library '%-.64s' (errno: %d %-.128s)"
+	est "Ei suuda avada jagatud teeki '%-.64s' (veakood: %d %-.128s)"
+	hun "A(z) '%-.64s' megosztott konyvtar nem hasznalhato (hibakod: %d %-.128s)"
+	ita "Impossibile aprire la libreria condivisa '%-.64s' (errno: %d %-.128s)"
+	nor "Can't open shared library '%-.64s' (errno: %d %-.128s)"
+	norwegian-ny "Can't open shared library '%-.64s' (errno: %d %-.128s)"
+	pol "Can't open shared library '%-.64s' (errno: %d %-.128s)"
 	rum "Nu pot deschide libraria shared '%-.64s' (Eroare: %d %-.64s)"
 	serbian "Ne mogu da otvorim share-ovanu biblioteku '%-.64s' (errno: %d %-.64s)"
@@ -3003,27 +3003,27 @@
 ER_CANT_FIND_DL_ENTRY  
-	dan "Kan ikke finde funktionen '%-.64s' i bibliotek"
-	nla "Kan functie '%-.64s' niet in library vinden"
-	eng "Can't find function '%-.64s' in library"
-	est "Ei leia funktsiooni '%-.64s' antud teegis"
-	ger "Kann Funktion '%-.64s' in der Library nicht finden"
-	hun "A(z) '%-.64s' fuggveny nem talalhato a konyvtarban"
-	ita "Impossibile trovare la funzione '%-.64s' nella libreria"
-	rum "Nu pot gasi functia '%-.64s' in libraria"
-	serbian "Ne mogu da pronadjem funkciju '%-.64s' u biblioteci"
-	swe "Hittar inte funktionen '%-.64s' in det dynamiska biblioteket"
+	dan "Kan ikke finde funktionen '%-.128s' i bibliotek"
+	nla "Kan functie '%-.128s' niet in library vinden"
+	eng "Can't find function '%-.128s' in library"
+	est "Ei leia funktsiooni '%-.128s' antud teegis"
+	ger "Kann Funktion '%-.128s' in der Library nicht finden"
+	hun "A(z) '%-.128s' fuggveny nem talalhato a konyvtarban"
+	ita "Impossibile trovare la funzione '%-.128s' nella libreria"
+	rum "Nu pot gasi functia '%-.128s' in libraria"
+	serbian "Ne mogu da pronadjem funkciju '%-.128s' u biblioteci"
+	swe "Hittar inte funktionen '%-.128s' in det dynamiska biblioteket"
 ER_FUNCTION_NOT_DEFINED  
 	dan "Funktionen '%-.64s' er ikke defineret"

--- 1.69/mysql-test/mysql-test-run.pl	2006-02-12 04:33:44 +01:00
+++ 1.70/mysql-test/mysql-test-run.pl	2006-03-10 10:41:00 +01:00
@@ -1105,6 +1105,14 @@
   }
 
   # --------------------------------------------------------------------------
+  # Add the path where mysqld will find udf_example.so
+  # --------------------------------------------------------------------------
+  $ENV{'LD_LIBRARY_PATH'}=
+    "$glob_basedir/sql/.libs" .
+      ($ENV{'LD_LIBRARY_PATH'} ? ":$ENV{'LD_LIBRARY_PATH'}" : "");
+
+
+  # --------------------------------------------------------------------------
   # Also command lines in .opt files may contain env vars
   # --------------------------------------------------------------------------
 

--- 1.1/mysql-test/r/udf.result	2006-02-15 17:11:20 +01:00
+++ 1.2/mysql-test/r/udf.result	2006-03-10 10:41:00 +01:00
@@ -10,7 +10,7 @@
 CREATE AGGREGATE FUNCTION avgcost
 RETURNS REAL SONAME 'udf_example.so';
 select myfunc_double();
-ERROR HY000: myfunc_double must have at least on argument
+ERROR HY000: myfunc_double must have at least one argument
 select myfunc_double(1);
 myfunc_double(1)
 49.00
@@ -59,18 +59,18 @@
 metaphon('hello')
 HL
 CREATE PROCEDURE `XXX1`(in testval varchar(10))
-begin 
-select metaphon(testval); 
+begin
+select metaphon(testval);
 end//
 call XXX1('hello');
 metaphon(testval)
 HL
 drop procedure xxx1;
 CREATE PROCEDURE `XXX2`()
-begin 
+begin
 declare testval varchar(10);
 set testval = 'hello';
-select metaphon(testval); 
+select metaphon(testval);
 end//
 call XXX2();
 metaphon(testval)

--- 1.1/mysql-test/t/udf.test	2006-02-15 17:11:20 +01:00
+++ 1.2/mysql-test/t/udf.test	2006-03-10 10:41:00 +01:00
@@ -1,7 +1,7 @@
 --source include/have_udf.inc
 #
-# To run this tests you need to compile "sql/udf_example.cc" into
-# udf_example.so and setup LD_LIBRARY_PATH to point out where 
+# To run this tests the "sql/udf_example.cc" need to be compiled into
+# udf_example.so and LD_LIBRARY_PATH should be setup to point out where
 # the library are.
 #
 
@@ -10,7 +10,7 @@
 drop table if exists t1;
 --enable_warnings
 
-# 
+#
 # Create the example functions from udf_example
 #
 
@@ -19,7 +19,7 @@
 
 # myfunc_int does not have a myfunc_int_init function and can 
 # not be loaded unless server is started with --allow-suspicious-udfs
---error 1127
+--error ER_CANT_FIND_DL_ENTRY
 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';
@@ -28,19 +28,27 @@
 CREATE AGGREGATE FUNCTION avgcost
         RETURNS REAL SONAME 'udf_example.so';
 
+--error 0
 select myfunc_double();
 select myfunc_double(1);
 select myfunc_double(78654);
+--error 1305
 select myfunc_int();
+--error 0
 select lookup();
 select lookup("127.0.0.1");
+--error 0
 select lookup(127,0,0,1);
 select lookup("localhost");
+--error 0
 select reverse_lookup();
 select reverse_lookup("127.0.0.1");
+--error 0
 select reverse_lookup(127,0,0,1);
 select reverse_lookup("localhost");
+--error 0
 select avgcost();
+--error 0
 select avgcost(100,23.76);
 create table t1(sum int, price float(24));
 insert into t1 values(100, 50.00), (100, 100.00);
@@ -54,12 +62,12 @@
 # BUG#17261 Passing a variable from a stored procedure to UDF crashes mysqld
 #------------------------------------------------------------------------
 
-select metaphon('hello'); 
+select metaphon('hello');
 
 delimiter //;
 CREATE PROCEDURE `XXX1`(in testval varchar(10))
-begin 
-select metaphon(testval); 
+begin
+select metaphon(testval);
 end//
 delimiter ;//
 
@@ -68,10 +76,10 @@
 
 delimiter //;
 CREATE PROCEDURE `XXX2`()
-begin 
+begin
 declare testval varchar(10);
 set testval = 'hello';
-select metaphon(testval); 
+select metaphon(testval);
 end//
 delimiter ;//
 
@@ -79,13 +87,13 @@
 drop procedure xxx2;
 
 
-# 
+#
 # Drop the example functions from udf_example
 #
 
 DROP FUNCTION metaphon;
 DROP FUNCTION myfunc_double;
---error 1305
+--error ER_SP_DOES_NOT_EXIST
 DROP FUNCTION myfunc_int;
 DROP FUNCTION sequence;
 DROP FUNCTION lookup;
Thread
bk commit into 5.0 tree (msvensson:1.2050) BUG#17261msvensson10 Mar