]> granicus.if.org Git - php/commitdiff
Throw warnings when using zero modulus in gmp_powm
authorNikita Popov <nikic@php.net>
Thu, 4 Sep 2014 18:55:09 +0000 (20:55 +0200)
committerNikita Popov <nikic@php.net>
Thu, 4 Sep 2014 18:55:09 +0000 (20:55 +0200)
Also fixes a leak in this case.

ext/gmp/gmp.c
ext/gmp/tests/016.phpt

index 619f1c39c35b8738c28f7f93cedec13e6e2da293..bad610c0b4508996c3c16ac084d85522b386d333 100644 (file)
@@ -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;
        }
index 8a0b34458fe39c99d1fc4e2df71cfef882f61cd1..f5857b6995d24238d2f77aee1d004f9833b6376a 100644 (file)
@@ -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)