From af9feff5f4ff8b4a3b66751b36e17767c30e501e Mon Sep 17 00:00:00 2001 From: vlefevre Date: Thu, 9 Apr 2015 23:57:31 +0000 Subject: [src/sum.c] Fixed bug: mpn functions do not accept a zero size argument. git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/branches/new-sum@9369 280ebfd0-de03-0410-8827-d642c229c3f4 --- src/sum.c | 7 +++++-- 1 file 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); } } -- cgit v1.2.1