Skip to content

Commit a142f10

Browse files
authored
Don't evaluate GMP comparison multiple times (#18321)
ZEND_THREEWAY_COMPARE evaluates its operands multiple times.
1 parent 4eb8839 commit a142f10

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

ext/gmp/gmp.c

+4-2
Original file line numberDiff line numberDiff line change
@@ -480,7 +480,8 @@ static int gmp_compare(zval *op1, zval *op2) /* {{{ */
480480
return ZEND_UNCOMPARABLE;
481481
}
482482

483-
return ZEND_THREEWAY_COMPARE(mpz_cmp(gmp_op1, gmp_op2), 0);
483+
int ret = mpz_cmp(gmp_op1, gmp_op2); /* avoid multiple evaluations */
484+
return ZEND_THREEWAY_COMPARE(ret, 0);
484485
}
485486
/* }}} */
486487

@@ -1422,7 +1423,8 @@ ZEND_FUNCTION(gmp_cmp)
14221423
GMP_Z_PARAM_INTO_MPZ_PTR(gmpnum_b)
14231424
ZEND_PARSE_PARAMETERS_END();
14241425

1425-
RETURN_LONG(ZEND_THREEWAY_COMPARE(mpz_cmp(gmpnum_a, gmpnum_b), 0));
1426+
int ret = mpz_cmp(gmpnum_a, gmpnum_b); /* avoid multiple evaluations */
1427+
RETURN_LONG(ZEND_THREEWAY_COMPARE(ret, 0));
14261428
}
14271429
/* }}} */
14281430

0 commit comments

Comments
 (0)