summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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);