summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2015-04-09 23:57:31 +0000
committervlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2015-04-09 23:57:31 +0000
commitaf9feff5f4ff8b4a3b66751b36e17767c30e501e (patch)
tree2f0378e9e3e6971a0ba7cfea848cf34d3dd0d1df
parent6a97eda862a7d2d2d6f73b9be8228db602e0e283 (diff)
downloadmpfr-new-sum.tar.gz
[src/sum.c] Fixed bug: mpn functions do not accept a zero size argument.new-sum
git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/branches/new-sum@9369 280ebfd0-de03-0410-8827-d642c229c3f4
-rw-r--r--src/sum.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/sum.c b/src/sum.c
index 2c22ad7fb..654fe5e8c 100644
--- a/src/sum.c
+++ b/src/sum.c
@@ -190,6 +190,7 @@ sum_raw (mp_limb_t *wp, mp_size_t ws, mpfr_prec_t wq, mpfr_ptr *const x,
vs--;
tr -= GMP_NUMB_BITS;
}
+ MPFR_ASSERTD (vs >= 1);
MPFR_ASSERTD (tr >= 0 && tr < GMP_NUMB_BITS);
if (tr != 0)
{
@@ -278,7 +279,8 @@ sum_raw (mp_limb_t *wp, mp_size_t ws, mpfr_prec_t wq, mpfr_ptr *const x,
MPFR_ASSERTD (carry <= 1);
if (tr != 0)
carry += vp[vs] & MPFR_LIMB_MASK (GMP_NUMB_BITS - tr);
- mpn_add_1 (dp + vs, dp + vs, ds - vs, carry);
+ if (ds > vs)
+ mpn_add_1 (dp + vs, dp + vs, ds - vs, carry);
}
else
{
@@ -288,7 +290,8 @@ sum_raw (mp_limb_t *wp, mp_size_t ws, mpfr_prec_t wq, mpfr_ptr *const x,
MPFR_ASSERTD (borrow <= 1);
if (tr != 0)
borrow += vp[vs] & MPFR_LIMB_MASK (GMP_NUMB_BITS - tr);
- mpn_sub_1 (dp + vs, dp + vs, ds - vs, borrow);
+ if (ds > vs)
+ mpn_sub_1 (dp + vs, dp + vs, ds - vs, borrow);
}
}