summaryrefslogtreecommitdiff
path: root/mpz
diff options
context:
space:
mode:
authorMarco Bodrato <bodrato@mail.dm.unipi.it>2020-02-12 20:14:44 +0100
committerMarco Bodrato <bodrato@mail.dm.unipi.it>2020-02-12 20:14:44 +0100
commitad5f51a7dcf6f2cb380f1fd112f8d06438779fd3 (patch)
tree9f0d96c4763694af8d1f219c125828c9e393eb76 /mpz
parent17f337cee40f1890a1e07521234ea5965cc54e6e (diff)
downloadgmp-ad5f51a7dcf6f2cb380f1fd112f8d06438779fd3.tar.gz
mpz/cmp{,abs}.c: Avoid any overflow.
Diffstat (limited to 'mpz')
-rw-r--r--mpz/cmp.c8
-rw-r--r--mpz/cmpabs.c8
2 files changed, 8 insertions, 8 deletions
diff --git a/mpz/cmp.c b/mpz/cmp.c
index a97b0043a..aa4fd5563 100644
--- a/mpz/cmp.c
+++ b/mpz/cmp.c
@@ -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);