Commit ee136691 authored by Alexey Kopytov's avatar Alexey Kopytov

Bug #52165: Assertion failed: file .\dtoa.c, line 465

The failing assertion was written with the assumption that a NULL
string can never be passed to my_strtod(). However, an empty string
may be passed under some circumstances by passing str == NULL and
*end == NULL.

Fixed the assertion to take the above case into account.

mysql-test/r/func_misc.result:
  Added a test case for bug #52165.
mysql-test/t/func_misc.test:
  Added a test case for bug #52165.
strings/dtoa.c:
  Fixed the assertion in my_strtod() to take the case of 'str == NULL
  && *end == NULL' into account.
parent 6da92d8f
......@@ -336,4 +336,13 @@ End of 5.0 tests
select connection_id() > 0;
connection_id() > 0
1
#
# Bug #52165: Assertion failed: file .\dtoa.c, line 465
#
CREATE TABLE t1 (a SET('a'), b INT);
INSERT INTO t1 VALUES ('', 0);
SELECT COALESCE(a) = COALESCE(b) FROM t1;
COALESCE(a) = COALESCE(b)
1
DROP TABLE t1;
End of tests
......@@ -467,4 +467,15 @@ select NAME_CONST('_id',1234) as id;
select connection_id() > 0;
--echo #
--echo # Bug #52165: Assertion failed: file .\dtoa.c, line 465
--echo #
CREATE TABLE t1 (a SET('a'), b INT);
INSERT INTO t1 VALUES ('', 0);
SELECT COALESCE(a) = COALESCE(b) FROM t1;
DROP TABLE t1;
--echo End of tests
......@@ -462,7 +462,9 @@ double my_strtod(const char *str, char **end, int *error)
{
char buf[DTOA_BUFF_SIZE];
double res;
DBUG_ASSERT(str != NULL && end != NULL && *end != NULL && error != NULL);
DBUG_ASSERT(end != NULL && ((str != NULL && *end != NULL) ||
(str == NULL && *end == NULL)) &&
error != NULL);
res= my_strtod_int(str, end, error, buf, sizeof(buf));
return (*error == 0) ? res : (res < 0 ? -DBL_MAX : DBL_MAX);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment