mirror of
https://github.com/MariaDB/server.git
synced 2025-01-27 09:14:17 +01:00
Fix for bug #10891 (string->decimal conversion crashes server)
mysql-test/r/type_newdecimal.result: test result fixed mysql-test/t/type_newdecimal.test: test case added strings/decimal.c: new_point can be 0, and this case should be handled separately
This commit is contained in:
parent
36421c837b
commit
995abb0ed2
3 changed files with 22 additions and 5 deletions
|
@ -934,3 +934,6 @@ select * from t1;
|
||||||
col1
|
col1
|
||||||
-9223372036854775808
|
-9223372036854775808
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
select cast('1.00000001335143196001808973960578441619873046875E-10' as decimal(30,15));
|
||||||
|
cast('1.00000001335143196001808973960578441619873046875E-10' as decimal(30,15))
|
||||||
|
0.000000000100000
|
||||||
|
|
|
@ -973,3 +973,8 @@ create table t1 (col1 bigint default -9223372036854775808);
|
||||||
insert into t1 values (default);
|
insert into t1 values (default);
|
||||||
select * from t1;
|
select * from t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #10891 (converting to decimal crashes server)
|
||||||
|
#
|
||||||
|
select cast('1.00000001335143196001808973960578441619873046875E-10' as decimal(30,15));
|
||||||
|
|
|
@ -739,11 +739,20 @@ int decimal_shift(decimal_t *dec, int shift)
|
||||||
beg= ROUND_UP(beg + 1) - 1;
|
beg= ROUND_UP(beg + 1) - 1;
|
||||||
end= ROUND_UP(end) - 1;
|
end= ROUND_UP(end) - 1;
|
||||||
DBUG_ASSERT(new_point >= 0);
|
DBUG_ASSERT(new_point >= 0);
|
||||||
new_point= ROUND_UP(new_point) - 1;
|
|
||||||
for(; new_point > end; new_point--)
|
/* We don't want negative new_point below */
|
||||||
dec->buf[new_point]= 0;
|
if (new_point != 0)
|
||||||
for(; new_point < beg; new_point++)
|
new_point= ROUND_UP(new_point) - 1;
|
||||||
dec->buf[new_point]= 0;
|
|
||||||
|
if (new_point > end)
|
||||||
|
do
|
||||||
|
{
|
||||||
|
dec->buf[new_point]=0;
|
||||||
|
}while (--new_point > end);
|
||||||
|
else
|
||||||
|
for (; new_point < beg; new_point++)
|
||||||
|
dec->buf[new_point]= 0;
|
||||||
|
|
||||||
dec->intg= digits_int;
|
dec->intg= digits_int;
|
||||||
dec->frac= digits_frac;
|
dec->frac= digits_frac;
|
||||||
return err;
|
return err;
|
||||||
|
|
Loading…
Add table
Reference in a new issue