diff --git a/.bzrignore b/.bzrignore index 0d352209a08..b6b5d0a613f 100644 --- a/.bzrignore +++ b/.bzrignore @@ -1059,3 +1059,4 @@ support-files/ndb-config-2-node.ini client/decimal.c client/my_decimal.cc client/my_decimal.h +libmysqld/my_decimal.cc diff --git a/sql/my_decimal.cc b/sql/my_decimal.cc index eafcd2eaaf3..027b33f1d1c 100644 --- a/sql/my_decimal.cc +++ b/sql/my_decimal.cc @@ -171,7 +171,7 @@ int str2my_decimal(uint mask, const char *from, uint length, } my_decimal_set_zero(decimal_value); err= string2decimal((char *)from, (decimal *)decimal_value, &end); - if (*end && !err) + if ((end-from) != length && !err) err= E_DEC_TRUNCATED; check_result(mask, err); return err; diff --git a/strings/decimal.c b/strings/decimal.c index 937ceb2f59b..da704280189 100644 --- a/strings/decimal.c +++ b/strings/decimal.c @@ -686,12 +686,13 @@ int decimal_shift(decimal *dec, int shift) { /* need to move digits */ int d_shift; + dec1 *to, *barier; if (new_front > 0) { /* move left */ d_shift= new_front / DIG_PER_DEC1; - dec1 *to= dec->buf + (ROUND_UP(beg + 1) - 1 - d_shift); - dec1 *barier= dec->buf + (ROUND_UP(end) - 1 - d_shift); + to= dec->buf + (ROUND_UP(beg + 1) - 1 - d_shift); + barier= dec->buf + (ROUND_UP(end) - 1 - d_shift); DBUG_ASSERT(to >= dec->buf); DBUG_ASSERT(barier + d_shift < dec->buf + dec->len); for(; to <= barier; to++) @@ -704,8 +705,8 @@ int decimal_shift(decimal *dec, int shift) { /* move right */ d_shift= (1 - new_front) / DIG_PER_DEC1; - dec1 *to= dec->buf + ROUND_UP(end) - 1 + d_shift; - dec1 *barier= dec->buf + ROUND_UP(beg + 1) - 1 + d_shift; + to= dec->buf + ROUND_UP(end) - 1 + d_shift; + barier= dec->buf + ROUND_UP(beg + 1) - 1 + d_shift; DBUG_ASSERT(to < dec->buf + dec->len); DBUG_ASSERT(barier - d_shift >= dec->buf); for(; to >= barier; to--)