Bug #3934 UDF on Windows crash the server
Submitted: 30 May 2004 8:43 Modified: 8 Jun 2004 12:37
Reporter: Miguel Solorzano Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: User-defined functions ( UDF ) Severity:S2 (Serious)
Version:4.0.20a OS:Windows (XP)
Assigned to: Vasily Kishkin CPU Architecture:Any

[30 May 2004 8:43] Miguel Solorzano
Description:
I created an VC++ project for to be added to the examples
package release and the functions: sequence() and avgcost()
crash the server disregarding the arguments how you can see
below:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 4.0.20a-debug

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> CREATE FUNCTION metaphon RETURNS STRING SONAME "myudf.dll";
Query OK, 0 rows affected (0.25 sec)

mysql> select metaphon("my test");
+---------------------+
| metaphon("my test") |
+---------------------+
| MTST                |
+---------------------+
1 row in set (0.12 sec)

mysql> CREATE FUNCTION myfunc_double RETURNS REAL SONAME "myudf.dll";
Query OK, 0 rows affected (0.00 sec)

mysql> select myfunc_double("my test");
+--------------------------+
| myfunc_double("my test") |
+--------------------------+
|          101.42857142857 |
+--------------------------+
1 row in set (0.00 sec)

mysql> CREATE FUNCTION myfunc_int RETURNS INTEGER SONAME "myudf.dll";
Query OK, 0 rows affected (0.00 sec)

mysql> select myfunc_int("my test");
+-----------------------+
| myfunc_int("my test") |
+-----------------------+
|                     7 |
+-----------------------+
1 row in set (0.00 sec)

mysql> CREATE FUNCTION sequence RETURNS INTEGER SONAME "myudf.dll";
Query OK, 0 rows affected (0.01 sec)

mysql> select sequence(1);
ERROR 2013: Lost connection to MySQL server during query

mysql> select sequence("mytest");
ERROR 2013: Lost connection to MySQL server during query

CALL STACK

myudf.dll!10001541() 	
mysqld.exe!Item_func_udf_int::val_int()  Line 1407	C++
mysqld.exe!Item_func_udf_int::val_str(String * str=0x03a7f1f8)
           Line 1412 + 0xb	C++
mysqld.exe!Item::send(THD * thd=0x02554948, String * packet=0x02554e18)
           Line 675 + 0x15	C++
mysqld.exe!select_send::send_data(List<Item> & items={...})
           Line 490 + 0x16	C++
mysqld.exe!mysql_select(THD * thd=0x02554948, st_table_list
           * tables=0x00000000, List<Item> & fields={...}, 
           Item * conds=0x00000000, st_order * order=0x00000000, st_order
           * group=0x00000000, Item * having=0x00000000, st_order
           * proc_param=0x00000000, unsigned long select_options=17339392,
           select_result * result=0x0255d9d8)  Line 445 + 0x18	C++
mysqld.exe!handle_select(THD * thd=0x02554948, st_lex * lex=0x02554a78,
           select_result * result=0x0255d9d8)  Line 191 + 0x51	C++
mysqld.exe!mysql_execute_command()  Line 1457 + 0x11	C++
mysqld.exe!mysql_parse(THD * thd=0x02554948, char * inBuf=0x0255d8b0,
           unsigned int length=25)  Line 3001	C++
mysqld.exe!dispatch_command(enum_server_command command=COM_QUERY,
           THD * thd=0x02554948, char * packet=0x02559849, 
           unsigned int packet_length=25)  Line 1083 + 0x17	C++
mysqld.exe!do_command(THD * thd=0x02554948)  Line 953 + 0x31	C++
mysqld.exe!handle_one_connection(void * arg=0x02554948)  Line 737 + 0x9	C++
mysqld.exe!pthread_start(void * param=0x02559638)  Line 63 + 0x7	C
mysqld.exe!_threadstart(void * ptd=0x0254be70)  Line 173 + 0xd	C
kernel32.dll!77e6d33b() 

mysql> CREATE AGGREGATE FUNCTION avgcost RETURNS REAL SONAME "myudf.dll";
Query OK, 0 rows affected (0.01 sec)

mysql> select avgcost(30,23);
ERROR 2013: Lost connection to MySQL server during query

CALL STACK

myudf.dll!10001567() 	
mysqld.exe!Item_sum_udf_float::val()  Line 1149	C++
mysqld.exe!Item_sum_udf_float::val_str(String * str=0x03a7f1f8)
           Line 1153 + 0xb	C++
mysqld.exe!Item::send(THD * thd=0x02555980, String * 
           packet=0x02555e50)  Line 675 + 0x15	C++
mysqld.exe!select_send::send_data(List<Item> & items={...})
           Line 490 + 0x16	C++
mysqld.exe!mysql_select(THD * thd=0x02555980, st_table_list
           * tables=0x00000000, List<Item> & fields={...}, Item *
           conds=0x00000000, st_order * order=0x00000000, st_order
           * group=0x00000000, Item * having=0x00000000, st_order
           * proc_param=0x00000000, unsigned long select_options=17339392,
           select_result * result=0x0255da10)  Line 445 + 0x18	C++
mysqld.exe!handle_select(THD * thd=0x02555980, st_lex * lex=0x02555ab0,
           select_result * result=0x0255da10)  Line 191 + 0x51	C++
mysqld.exe!mysql_execute_command()  Line 1457 + 0x11	C++
mysqld.exe!mysql_parse(THD * thd=0x02555980, char * inBuf=0x0255d8b0,
           unsigned int length=21)  Line 3001	C++
mysqld.exe!dispatch_command(enum_server_command command=COM_QUERY,
           THD * thd=0x02555980, char * packet=0x02559849, 
           unsigned int packet_length=21)  Line 1083 + 0x17	C++
mysqld.exe!do_command(THD * thd=0x02555980)  Line 953 + 0x31	C++
mysqld.exe!handle_one_connection(void * arg=0x02555980)  Line 737 + 0x9	C++
mysqld.exe!pthread_start(void * param=0x02559638)  Line 63 + 0x7	C
mysqld.exe!_threadstart(void * ptd=0x0254be80)  Line 173 + 0xd	C
kernel32.dll!77e6d33b() 	
	

How to repeat:
Use the myudf.dll attached like showed in the
description.
[30 May 2004 8:52] MySQL Verification Team
I forget to mention that the source file for the dll is
udf_example.cc
[7 Jun 2004 15:31] Vasily Kishkin
init and deinit functions are not declared in ".def" file and exported from dll on Windows. Because when example function is called - the function has non-initialize structure.
[8 Jun 2004 12:37] Vasily Kishkin
Thank you for your bug report. This issue has been committed to our
source repository of that product and will be incorporated into the
next release.

If necessary, you can access the source repository and build the latest
available version, including the bugfix, yourself. More information 
about accessing the source trees is available at
    http://www.mysql.com/doc/en/Installing_source_tree.html