Bug #36139 | float, zerofill, crash with subquery | ||
---|---|---|---|
Submitted: | 16 Apr 2008 13:44 | Modified: | 7 May 2008 19:22 |
Reporter: | Shane Bester (Platinum Quality Contributor) | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Optimizer | Severity: | S1 (Critical) |
Version: | 5.1.25-bk, 5.0-bk, 6.0.5-bk | OS: | Any |
Assigned to: | Sergey Petrunya | CPU Architecture: | Any |
Tags: | ZEROFILL |
[16 Apr 2008 13:44]
Shane Bester
[16 Apr 2008 13:57]
MySQL Verification Team
Thank you for the bug report. Verified on Suse 10.3 X64: miguel@hegel:~/dbs> 6.0/bin/mysql -uroot test Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 6.0.5-alpha-debug Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> drop table if exists t1; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> drop table if exists t2; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> create table `t1` (`a` float(5,4) zerofill) engine=myisam; Query OK, 0 rows affected (0.06 sec) mysql> create table `t2` (`a` float(5,4),`b` float(2,0)) engine=myisam; Query OK, 0 rows affected (0.05 sec) mysql> select t1.a from t1 where -> t1.a= (select b from t2 limit 1) and not -> t1.a= (select a from t2 limit 1) ; ERROR 2013 (HY000): Lost connection to MySQL server during query mysql>
[16 Apr 2008 14:09]
MySQL Verification Team
this bug seems to have appeared in 5.1.24. earlier versions didn't crash.
[21 Apr 2008 18:56]
Sergey Petrunya
The crash can be also observed on 5.0.60-bk.
[21 Apr 2008 19:42]
Sergey Petrunya
The problem has been introduced by this change: # ChangeSet # 2008/02/15 15:47:32+02:00 gkodinov@magare.gmz # Bug #31887: DML Select statement not returning same results # when executed in version 5 #
[21 Apr 2008 20:20]
Sergey Petrunya
item.cc: static void convert_zerofill_number_to_string(Item **item, Field_num *field) { char buff[MAX_FIELD_WIDTH],*pos; String tmp(buff,sizeof(buff), field->charset()), *res; res= (*item)->val_str(&tmp); // The problem starts here. (*item)->val_str() evaluates to SQL's NULL, i.e // we get: // res= NULL // (*item)->is_null() == TRUE. // and the following statement will crash because it can't handle res==NULL // case: field->prepend_zeros(res); pos= (char *) sql_strmake (res->ptr(), res->length()); *item= new Item_string(pos, res->length(), field->charset()); }
[21 Apr 2008 21:46]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/45790 ChangeSet@1.2610, 2008-04-22 01:45:48+04:00, sergefp@mysql.com +3 -0 BUG#36139 "float, zerofill, crash with subquery" - Make convert_zerofill_number_to_string() take into account that the constant it is converting may evaluate to NULL.
[21 Apr 2008 22:53]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/45791 ChangeSet@1.2609, 2008-04-22 02:53:12+04:00, sergefp@mysql.com +3 -0 BUG#36139 "float, zerofill, crash with subquery" - Make convert_zerofill_number_to_string() take into account that the constant it is converting may evaluate to NULL.
[22 Apr 2008 2:31]
Sergey Petrunya
Pushed into {5.0,5.1}-bugteam trees.
[23 Apr 2008 9:24]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/45869 ChangeSet@1.2612, 2008-04-23 14:22:49+05:00, gshchepa@host.loc +2 -0 subselect.test, subselect.result: Post-commit minor cleanup of testcase (bug#36139).
[1 May 2008 6:16]
Bugs System
Pushed into 5.1.25-rc
[1 May 2008 6:19]
Bugs System
Pushed into 6.0.6-alpha
[6 May 2008 0:25]
Bugs System
Pushed into 5.0.62
[7 May 2008 19:22]
Paul DuBois
Noted in 5.0.62, 5.1.25, 6.0.6 changelogs. Conversion of a FLOAT ZEROFILL value to string could cause a server crash if the value was NULL.