Commit 995abb0e authored by unknown's avatar unknown
Browse files

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
parent 36421c83
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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
+5 −0
Original line number Diff line number Diff line
@@ -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));
+14 −5
Original line number Diff line number Diff line
@@ -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);
  
  /* We don't want negative new_point below */
  if (new_point != 0)
    new_point= ROUND_UP(new_point) - 1;
  for(; new_point > end; new_point--)

  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;