Bug #39300 low memory crash with create temporary table x select * from y
Submitted: 8 Sep 2008 6:54 Modified: 12 Apr 2010 21:32
Reporter: Shane Bester (Platinum Quality Contributor) Email Updates:
Status: Can't repeat Impact on me:
None 
Category:MySQL Server: Federated storage engine Severity:S2 (Serious)
Version:5.0.66a OS:Any
Assigned to: CPU Architecture:Any

[8 Sep 2008 6:54] Shane Bester
Description:
call stack:

mysqld-debug.exe!Field::eq_def(Field * field=0x00000000)  Line 7947
mysqld-debug.exe!create_tmp_field Line 9156
mysqld-debug.exe!create_table_from_items Line 3186
mysqld-debug.exe!select_create::prepare 
mysqld-debug.exe!JOIN::prepare
mysqld-debug.exe!mysql_select
mysqld-debug.exe!handle_select
mysqld-debug.exe!mysql_execute_command
mysqld-debug.exe!mysql_parse
mysqld-debug.exe!dispatch_command
mysqld-debug.exe!do_command
mysqld-debug.exe!handle_one_connection
mysqld-debug.exe!pthread_start
mysqld-debug.exe!_threadstart

How to repeat:
you have to start mysql like this:

mysqld-debug --console --safemalloc-mem-limit=15485760 --skip-grant-tables --skip-name-resolve

notice the --safemalloc-mem-limit option will be used to fake an out of memory condition.  testcase will be uploaded later.
[8 Sep 2008 7:40] MySQL Verification Team
here's another call stack observed by same crash.   The problem is federated is pulling entire resultset into memory, and somewhere not checking for OOM errors.

                                                             
mysqld-debug.exe!str_to_datetime                             
mysqld-debug.exe!Field_datetime::store                       
mysqld-debug.exe!ha_federated::convert_row_to_internal_format
mysqld-debug.exe!ha_federated::read_next                     
mysqld-debug.exe!ha_federated::rnd_next                      
mysqld-debug.exe!rr_sequential                               
mysqld-debug.exe!join_init_read_record                       
mysqld-debug.exe!sub_select                                  
mysqld-debug.exe!do_select                                   
mysqld-debug.exe!JOIN::exec                                  
mysqld-debug.exe!mysql_select                                
mysqld-debug.exe!handle_select                               
mysqld-debug.exe!mysql_execute_command                       
mysqld-debug.exe!mysql_parse                                 
mysqld-debug.exe!dispatch_command                            
mysqld-debug.exe!do_command                                  
mysqld-debug.exe!handle_one_connection                       
mysqld-debug.exe!pthread_start                               
mysqld-debug.exe!_threadstart