summaryrefslogtreecommitdiff
path: root/mul.c
diff options
context:
space:
mode:
authorvlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2002-01-22 00:45:44 +0000
committervlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2002-01-22 00:45:44 +0000
commit67b58148a1817ff4539d4a9152dcc185f6509a0f (patch)
tree89edee7b60ad573d8ee295cfe4e5b445e5c032b4 /mul.c
parente643fca8156a8d7062a3c1f9709700f7c00f7833 (diff)
downloadmpfr-67b58148a1817ff4539d4a9152dcc185f6509a0f.tar.gz
MPFR_PREC_MAX redefined.
MPFR_INTPREC_MAX defined (internal maximum precision). Some integer overflow detection. git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@1666 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'mul.c')
-rw-r--r--mul.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/mul.c b/mul.c
index 232efb95a..343eebc90 100644
--- a/mul.c
+++ b/mul.c
@@ -136,12 +136,13 @@ mpfr_mul (mpfr_ptr a, mpfr_srcptr b, mpfr_srcptr c, mp_rnd_t rnd_mode)
bn = (bq-1)/BITS_PER_MP_LIMB + 1; /* number of significant limbs of b */
cn = (cq-1)/BITS_PER_MP_LIMB + 1; /* number of significant limbs of c */
- MPFR_ASSERTN(bq + cq >= bq); /* no integer overflow */
- tn = (bq + cq - 1) / BITS_PER_MP_LIMB + 1;
-
MPFR_ASSERTN((mp_size_unsigned_t) bn + cn <= MP_SIZE_T_MAX);
- k = bn + cn; /* effective nb of limbs used by b*c (=tn or tn+1) */
+ k = bn + cn; /* effective nb of limbs used by b*c (= tn or tn+1) below */
+
+ MPFR_ASSERTN(bq + cq >= bq); /* no integer overflow */
+ tn = (bq + cq - 1) / BITS_PER_MP_LIMB + 1; /* <= k, thus no int overflow */
+ MPFR_ASSERTN(k <= ((size_t) -1) / BYTES_PER_MP_LIMB);
TMP_MARK(marker);
tmp = (mp_limb_t *) TMP_ALLOC((size_t) k * BYTES_PER_MP_LIMB);