mirror of
https://github.com/MariaDB/server.git
synced 2025-01-26 08:44:33 +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
|
||||
-9223372036854775808
|
||||
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);
|
||||
select * from 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;
|
||||
end= ROUND_UP(end) - 1;
|
||||
DBUG_ASSERT(new_point >= 0);
|
||||
new_point= ROUND_UP(new_point) - 1;
|
||||
for(; new_point > end; new_point--)
|
||||
dec->buf[new_point]= 0;
|
||||
for(; new_point < beg; new_point++)
|
||||
dec->buf[new_point]= 0;
|
||||
|
||||
/* We don't want negative new_point below */
|
||||
if (new_point != 0)
|
||||
new_point= ROUND_UP(new_point) - 1;
|
||||
|
||||
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->frac= digits_frac;
|
||||
return err;
|
||||
|
|
Loading…
Add table
Reference in a new issue