Skip to content

Commit bb1ef4f

Browse files
authored
ext/gmp: gmp_invert addressing todo. (#13654)
1 parent 3c74f4a commit bb1ef4f

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

ext/gmp/gmp.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1585,11 +1585,15 @@ ZEND_FUNCTION(gmp_invert)
15851585
RETURN_THROWS();
15861586
}
15871587

1588+
if (Z_TYPE_P(b_arg) == IS_LONG && Z_LVAL_P(b_arg) == 0) {
1589+
zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Division by zero");
1590+
RETURN_THROWS();
1591+
}
1592+
15881593
FETCH_GMP_ZVAL(gmpnum_a, a_arg, temp_a, 1);
15891594
FETCH_GMP_ZVAL_DEP(gmpnum_b, b_arg, temp_b, temp_a, 2);
15901595

1591-
// TODO Early check if b_arg IS_LONG?
1592-
if (0 == mpz_cmp_ui(gmpnum_b, 0)) {
1596+
if (!mpz_cmp_ui(gmpnum_b, 0)) {
15931597
zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Division by zero");
15941598
FREE_GMP_TEMP(temp_a);
15951599
FREE_GMP_TEMP(temp_b);

ext/gmp/tests/gmp_invert.phpt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,13 @@ try {
1515
echo $e->getMessage() . \PHP_EOL;
1616
}
1717

18+
try {
19+
$zero = new GMP(0);
20+
var_dump(gmp_invert(5, $zero));
21+
} catch (\DivisionByZeroError $e) {
22+
echo $e->getMessage() . \PHP_EOL;
23+
}
24+
1825
var_dump(gmp_strval(gmp_invert(0,28347)));
1926
var_dump(gmp_strval(gmp_invert(-12,456456)));
2027
var_dump(gmp_strval(gmp_invert(234234,-435345)));
@@ -48,6 +55,7 @@ string(7) "2293131"
4855
string(1) "0"
4956
string(4) "5827"
5057
Division by zero
58+
Division by zero
5159
string(1) "0"
5260
string(1) "0"
5361
string(1) "0"

0 commit comments

Comments
 (0)