summaryrefslogtreecommitdiff
path: root/sub.c
diff options
context:
space:
mode:
authorzimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4>2000-06-29 13:18:58 +0000
committerzimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4>2000-06-29 13:18:58 +0000
commit8afee997974d9028428db165c59480f0871686bc (patch)
tree7af6d7f75d6c54d4422a534555af936b22c93dc0 /sub.c
parentf84538de8cdb6b63060bd73926b8c42768fc5ac6 (diff)
downloadmpfr-8afee997974d9028428db165c59480f0871686bc.tar.gz
be careful not to call mpn_sub_n/mpn_sub_1 with a size 0
git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@657 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'sub.c')
-rw-r--r--sub.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/sub.c b/sub.c
index 993dd21d6..f1677fbc8 100644
--- a/sub.c
+++ b/sub.c
@@ -301,8 +301,9 @@ mpfr_sub1(a, b, c, rnd_mode, diff_exp)
imax = (int)an-(int)bn+cancel1;
for (i=0;i<imax;i++) ap[i] = ~ap[i];
cc = (i) ? mpn_add_1(ap, ap, i, 1) : 1;
- mpn_sub_lshift_n(ap+i, bp, bn-cancel1, cancel2, an);
- mpn_sub_1(ap+i, ap+i, an-i, ONE-cc);
+ if (cancel1<bn) mpn_sub_lshift_n(ap+i, bp, bn-cancel1, cancel2, an);
+ /* warning: mpn_sub_1 doesn't accept a zero length */
+ if (i<an) mpn_sub_1(ap+i, ap+i, an-i, ONE-cc);
}
else /* PREC(b) > PREC(a): we have to truncate b */
mpn_sub_lshift_n(ap, bp+(bn-an-cancel1), an, cancel2, an);