diff options
-rw-r--r-- | mpz/cmp.c | 8 | ||||
-rw-r--r-- | mpz/cmpabs.c | 8 |
2 files changed, 8 insertions, 8 deletions
@@ -35,15 +35,15 @@ see https://www.gnu.org/licenses/. */ int mpz_cmp (mpz_srcptr u, mpz_srcptr v) __GMP_NOTHROW { - mp_size_t usize, vsize, dsize, asize; + mp_size_t usize, vsize, asize; mp_srcptr up, vp; int cmp; usize = SIZ(u); vsize = SIZ(v); - dsize = usize - vsize; - if (dsize != 0) - return dsize; + /* Cannot use usize - vsize, may overflow an "int" */ + if (usize != vsize) + return (usize > vsize) ? 1 : -1; asize = ABS (usize); up = PTR(u); diff --git a/mpz/cmpabs.c b/mpz/cmpabs.c index 14f0dc95c..fb1ddc9d8 100644 --- a/mpz/cmpabs.c +++ b/mpz/cmpabs.c @@ -36,15 +36,15 @@ see https://www.gnu.org/licenses/. */ int mpz_cmpabs (mpz_srcptr u, mpz_srcptr v) __GMP_NOTHROW { - mp_size_t usize, vsize, dsize; + mp_size_t usize, vsize; mp_srcptr up, vp; int cmp; usize = ABSIZ (u); vsize = ABSIZ (v); - dsize = usize - vsize; - if (dsize != 0) - return dsize; + /* Cannot use usize - vsize, may overflow an "int" */ + if (usize != vsize) + return (usize > vsize) ? 1 : -1; up = PTR(u); vp = PTR(v); |