From: Michael Widenius Date: April 2 1999 11:05am Subject: sql_select.cc divide by zero (patch incl.) List-Archive: http://lists.mysql.com/mysql/1314 Message-Id: <14084.41919.609292.353088@monty.pp.sci.fi> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Hi! >>>>> "Thimble" == Thimble Smith writes: >> Description: Thimble> SELECT Thimble> r.resource_id, person_id Thimble> FROM Thimble> resources r Thimble> LEFT JOIN Thimble> resource_persons USING (resource_id) Thimble> WHERE Thimble> r.resource_id IN (1) Thimble> This query will crash if table resources has more than one Thimble> row and table resource_persons has zero rows. Thimble> gdb backtrace, mysql.trace, etc. are available at: Thimble> http://tim.desert.net/~tim/sql_select-bug.txt >> How-To-Repeat: Thanks for the clear bug report! Your patch should work, but I prefered the following: (/my/monty/sql-3.22) diff -c /my/monty/master/mysql-3.22.20/sql/sql_select.cc . *** /my/monty/master/mysql-3.22.20/sql/sql_select.cc Tue Mar 9 05:36:16 1999 --- ./sql_select.cc Fri Apr 2 14:01:32 1999 *************** *** 1438,1444 **** !(rec_per_key=(double) table->keyfile_info.rec_per_key[key])) rec_per_key=(double) s->records/rec+1; ! if (rec_per_key/(double) s->records >= 0.01) tmp=rec_per_key; else { --- 1438,1446 ---- !(rec_per_key=(double) table->keyfile_info.rec_per_key[key])) rec_per_key=(double) s->records/rec+1; ! if (!s->records) ! tmp=0; ! else if (rec_per_key/(double) s->records >= 0.01) tmp=rec_per_key; else { Regards, Monty