Skip to content

Commit 15c139b

Browse files
committed
Throw warnings when using zero modulus in gmp_powm
Also fixes a leak in this case.
1 parent f10d194 commit 15c139b

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

ext/gmp/gmp.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1484,10 +1484,9 @@ ZEND_FUNCTION(gmp_powm)
14841484
FETCH_GMP_ZVAL_DEP_DEP(gmpnum_mod, mod_arg, temp_mod, temp_exp, temp_base);
14851485

14861486
if (!mpz_cmp_ui(gmpnum_mod, 0)) {
1487+
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Modulus may not be zero");
14871488
FREE_GMP_TEMP(temp_base);
1488-
if (use_ui) {
1489-
FREE_GMP_TEMP(temp_exp);
1490-
}
1489+
FREE_GMP_TEMP(temp_exp);
14911490
FREE_GMP_TEMP(temp_mod);
14921491
RETURN_FALSE;
14931492
}

ext/gmp/tests/016.phpt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ var_dump(gmp_strval(gmp_powm($n,$e,1000)));
1919
$m = gmp_init(900);
2020
var_dump(gmp_strval(gmp_powm($n,$e,$m)));
2121

22+
var_dump(gmp_powm(5, 11, 0));
23+
var_dump(gmp_powm(5, "11", gmp_init(0)));
24+
2225
var_dump(gmp_powm(array(),$e,$m));
2326
var_dump(gmp_powm($n,array(),$m));
2427
var_dump(gmp_powm($n,$e,array()));
@@ -46,6 +49,12 @@ string(3) "331"
4649
string(3) "171"
4750
string(3) "371"
4851

52+
Warning: gmp_powm(): Modulus may not be zero in %s on line %d
53+
bool(false)
54+
55+
Warning: gmp_powm(): Modulus may not be zero in %s on line %d
56+
bool(false)
57+
4958
Warning: gmp_powm(): Unable to convert variable to GMP - wrong type in %s on line %d
5059
bool(false)
5160

0 commit comments

Comments
 (0)