summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikic@php.net>2014-09-04 20:55:09 +0200
committerNikita Popov <nikic@php.net>2014-09-04 20:55:09 +0200
commit15c139b99a6a887e2a9e8e1a07632e390650bd13 (patch)
tree5b720bab35f64ac62685f35d8ecb1cbdbdb7d38d
parentf10d194c8cece6e0d5d34d8be0ea669bc6319e88 (diff)
downloadphp-git-15c139b99a6a887e2a9e8e1a07632e390650bd13.tar.gz
Throw warnings when using zero modulus in gmp_powm
Also fixes a leak in this case.
-rw-r--r--ext/gmp/gmp.c5
-rw-r--r--ext/gmp/tests/016.phpt9
2 files changed, 11 insertions, 3 deletions
diff --git a/ext/gmp/gmp.c b/ext/gmp/gmp.c
index 619f1c39c3..bad610c0b4 100644
--- a/ext/gmp/gmp.c
+++ b/ext/gmp/gmp.c
@@ -1484,10 +1484,9 @@ ZEND_FUNCTION(gmp_powm)
FETCH_GMP_ZVAL_DEP_DEP(gmpnum_mod, mod_arg, temp_mod, temp_exp, temp_base);
if (!mpz_cmp_ui(gmpnum_mod, 0)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Modulus may not be zero");
FREE_GMP_TEMP(temp_base);
- if (use_ui) {
- FREE_GMP_TEMP(temp_exp);
- }
+ FREE_GMP_TEMP(temp_exp);
FREE_GMP_TEMP(temp_mod);
RETURN_FALSE;
}
diff --git a/ext/gmp/tests/016.phpt b/ext/gmp/tests/016.phpt
index 8a0b34458f..f5857b6995 100644
--- a/ext/gmp/tests/016.phpt
+++ b/ext/gmp/tests/016.phpt
@@ -19,6 +19,9 @@ var_dump(gmp_strval(gmp_powm($n,$e,1000)));
$m = gmp_init(900);
var_dump(gmp_strval(gmp_powm($n,$e,$m)));
+var_dump(gmp_powm(5, 11, 0));
+var_dump(gmp_powm(5, "11", gmp_init(0)));
+
var_dump(gmp_powm(array(),$e,$m));
var_dump(gmp_powm($n,array(),$m));
var_dump(gmp_powm($n,$e,array()));
@@ -46,6 +49,12 @@ string(3) "331"
string(3) "171"
string(3) "371"
+Warning: gmp_powm(): Modulus may not be zero in %s on line %d
+bool(false)
+
+Warning: gmp_powm(): Modulus may not be zero in %s on line %d
+bool(false)
+
Warning: gmp_powm(): Unable to convert variable to GMP - wrong type in %s on line %d
bool(false)