mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
merge 5.0-security => 5.1 security
This commit is contained in:
@ -1494,9 +1494,8 @@ decimal_round(decimal_t *from, decimal_t *to, int scale,
|
||||
{
|
||||
int frac0=scale>0 ? ROUND_UP(scale) : scale/DIG_PER_DEC1,
|
||||
frac1=ROUND_UP(from->frac), UNINIT_VAR(round_digit),
|
||||
intg0=ROUND_UP(from->intg), error=E_DEC_OK, len=to->len,
|
||||
intg1=ROUND_UP(from->intg +
|
||||
(((intg0 + frac0)>0) && (from->buf[0] == DIG_MAX)));
|
||||
intg0=ROUND_UP(from->intg), error=E_DEC_OK, len=to->len;
|
||||
|
||||
dec1 *buf0=from->buf, *buf1=to->buf, x, y, carry=0;
|
||||
int first_dig;
|
||||
|
||||
@ -1511,6 +1510,12 @@ decimal_round(decimal_t *from, decimal_t *to, int scale,
|
||||
default: DBUG_ASSERT(0);
|
||||
}
|
||||
|
||||
/*
|
||||
For my_decimal we always use len == DECIMAL_BUFF_LENGTH == 9
|
||||
For internal testing here (ifdef MAIN) we always use len == 100/4
|
||||
*/
|
||||
DBUG_ASSERT(from->len == to->len);
|
||||
|
||||
if (unlikely(frac0+intg0 > len))
|
||||
{
|
||||
frac0=len-intg0;
|
||||
@ -1524,17 +1529,17 @@ decimal_round(decimal_t *from, decimal_t *to, int scale,
|
||||
return E_DEC_OK;
|
||||
}
|
||||
|
||||
if (to != from || intg1>intg0)
|
||||
if (to != from)
|
||||
{
|
||||
dec1 *p0= buf0+intg0+max(frac1, frac0);
|
||||
dec1 *p1= buf1+intg1+max(frac1, frac0);
|
||||
dec1 *p1= buf1+intg0+max(frac1, frac0);
|
||||
|
||||
DBUG_ASSERT(p0 - buf0 <= len);
|
||||
DBUG_ASSERT(p1 - buf1 <= len);
|
||||
|
||||
while (buf0 < p0)
|
||||
*(--p1) = *(--p0);
|
||||
if (unlikely(intg1 > intg0))
|
||||
to->buf[0]= 0;
|
||||
|
||||
intg0= intg1;
|
||||
buf0=to->buf;
|
||||
buf1=to->buf;
|
||||
to->sign=from->sign;
|
||||
|
Reference in New Issue
Block a user