diff options
author | Marco Bodrato <bodrato@mail.dm.unipi.it> | 2020-02-12 20:14:44 +0100 |
---|---|---|
committer | Marco Bodrato <bodrato@mail.dm.unipi.it> | 2020-02-12 20:14:44 +0100 |
commit | ad5f51a7dcf6f2cb380f1fd112f8d06438779fd3 (patch) | |
tree | 9f0d96c4763694af8d1f219c125828c9e393eb76 /mpz | |
parent | 17f337cee40f1890a1e07521234ea5965cc54e6e (diff) | |
download | gmp-ad5f51a7dcf6f2cb380f1fd112f8d06438779fd3.tar.gz |
mpz/cmp{,abs}.c: Avoid any overflow.
Diffstat (limited to 'mpz')
-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); |