Commit 36ab2574 authored by Tor Didriksen's avatar Tor Didriksen

Bug #58137 char(0) column cause: my_gcvt: Assertion `width > 0 && to != ((void *)0)' failed



mysql-test/r/func_math.result:
  Add test for Bug #58137
mysql-test/t/func_math.test:
  Add test for Bug #58137
sql/field.cc:
  Skip calling my_gcvt() if we are trying to insert a double into a char(0) column.
parent cd9bee8d
...@@ -607,3 +607,12 @@ SELECT floor(log10(format(concat_ws(5445796E25, 5306463, 30837), -358821))) ...@@ -607,3 +607,12 @@ SELECT floor(log10(format(concat_ws(5445796E25, 5306463, 30837), -358821)))
as foo; as foo;
foo foo
2 2
#
# Bug #58137 char(0) column cause:
# my_gcvt: Assertion `width > 0 && to != ((void *)0)' failed
#
CREATE TABLE t1(a char(0));
INSERT INTO t1 (SELECT -pi());
Warnings:
Warning 1265 Data truncated for column 'a' at row 1
DROP TABLE t1;
...@@ -464,3 +464,11 @@ SELECT -9223372036854775808 MOD -1; ...@@ -464,3 +464,11 @@ SELECT -9223372036854775808 MOD -1;
--echo # --echo #
SELECT floor(log10(format(concat_ws(5445796E25, 5306463, 30837), -358821))) SELECT floor(log10(format(concat_ws(5445796E25, 5306463, 30837), -358821)))
as foo; as foo;
--echo #
--echo # Bug #58137 char(0) column cause:
--echo # my_gcvt: Assertion `width > 0 && to != ((void *)0)' failed
--echo #
CREATE TABLE t1(a char(0));
INSERT INTO t1 (SELECT -pi());
DROP TABLE t1;
...@@ -6327,10 +6327,13 @@ int Field_str::store(double nr) ...@@ -6327,10 +6327,13 @@ int Field_str::store(double nr)
ASSERT_COLUMN_MARKED_FOR_WRITE; ASSERT_COLUMN_MARKED_FOR_WRITE;
char buff[DOUBLE_TO_STRING_CONVERSION_BUFFER_SIZE]; char buff[DOUBLE_TO_STRING_CONVERSION_BUFFER_SIZE];
uint local_char_length= field_length / charset()->mbmaxlen; uint local_char_length= field_length / charset()->mbmaxlen;
size_t length; size_t length= 0;
my_bool error; my_bool error= (local_char_length == 0);
// my_gcvt() requires width > 0, and we may have a CHAR(0) column.
if (!error)
length= my_gcvt(nr, MY_GCVT_ARG_DOUBLE, local_char_length, buff, &error); length= my_gcvt(nr, MY_GCVT_ARG_DOUBLE, local_char_length, buff, &error);
if (error) if (error)
{ {
if (table->in_use->abort_on_warning) if (table->in_use->abort_on_warning)
......
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