mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
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.
This commit is contained in:
@ -336,4 +336,13 @@ End of 5.0 tests
|
|||||||
select connection_id() > 0;
|
select connection_id() > 0;
|
||||||
connection_id() > 0
|
connection_id() > 0
|
||||||
1
|
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
|
End of tests
|
||||||
|
@ -467,4 +467,15 @@ select NAME_CONST('_id',1234) as id;
|
|||||||
|
|
||||||
select connection_id() > 0;
|
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
|
--echo End of tests
|
||||||
|
@ -462,7 +462,9 @@ double my_strtod(const char *str, char **end, int *error)
|
|||||||
{
|
{
|
||||||
char buf[DTOA_BUFF_SIZE];
|
char buf[DTOA_BUFF_SIZE];
|
||||||
double res;
|
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));
|
res= my_strtod_int(str, end, error, buf, sizeof(buf));
|
||||||
return (*error == 0) ? res : (res < 0 ? -DBL_MAX : DBL_MAX);
|
return (*error == 0) ? res : (res < 0 ? -DBL_MAX : DBL_MAX);
|
||||||
|
Reference in New Issue
Block a user