diff options
author | vlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4> | 2015-04-09 23:57:31 +0000 |
---|---|---|
committer | vlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4> | 2015-04-09 23:57:31 +0000 |
commit | af9feff5f4ff8b4a3b66751b36e17767c30e501e (patch) | |
tree | 2f0378e9e3e6971a0ba7cfea848cf34d3dd0d1df | |
parent | 6a97eda862a7d2d2d6f73b9be8228db602e0e283 (diff) | |
download | mpfr-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.c | 7 |
1 files changed, 5 insertions, 2 deletions
@@ -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); } } |