]> granicus.if.org Git - php/commitdiff
Fixed bug #27258 (moved FPE check to correct location).
authorIlia Alshanetsky <iliaa@php.net>
Sun, 15 Feb 2004 17:22:57 +0000 (17:22 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Sun, 15 Feb 2004 17:22:57 +0000 (17:22 +0000)
Fixed several possible FPE.

ext/gmp/gmp.c

index 1096b1f8e67e51bdb04dccdb9b4d60e2c4c24110..0825358693f643f8eec795b6b1654f1550324779 100644 (file)
@@ -312,6 +312,11 @@ static inline void gmp_zval_binary_ui_op_ex(zval *return_value, zval **a_arg, zv
                FETCH_GMP_ZVAL(gmpnum_b, b_arg);
        }
 
+       convert_to_long_ex(b_arg);
+       if (!Z_LVAL_PP(b_arg)) {
+               RETURN_FALSE;
+       }
+
        INIT_GMP_NUM(gmpnum_result);
 
        if (use_ui && gmp_ui_op) {
@@ -353,6 +358,11 @@ static inline void gmp_zval_binary_ui_op2_ex(zval *return_value, zval **a_arg, z
                FETCH_GMP_ZVAL(gmpnum_b, b_arg);
        }
 
+       convert_to_long_ex(b_arg);
+       if (!Z_LVAL_PP(b_arg)) {
+               RETURN_FALSE;
+       }
+
        INIT_GMP_NUM(gmpnum_result1);
        INIT_GMP_NUM(gmpnum_result2);
 
@@ -825,11 +835,6 @@ ZEND_FUNCTION(gmp_powm)
                WRONG_PARAM_COUNT;
        }
 
-       convert_to_long_ex(mod_arg);
-       if (!Z_LVAL_PP(mod_arg)) {
-               RETURN_FALSE;
-       }
-
        FETCH_GMP_ZVAL(gmpnum_base, base_arg);
 
        if (Z_TYPE_PP(exp_arg) == IS_LONG && Z_LVAL_PP(exp_arg) >= 0) {
@@ -839,6 +844,11 @@ ZEND_FUNCTION(gmp_powm)
        }
        FETCH_GMP_ZVAL(gmpnum_mod, mod_arg);
 
+       convert_to_long_ex(mod_arg);
+       if (!Z_LVAL_PP(mod_arg)) {
+               RETURN_FALSE;
+       }
+
        INIT_GMP_NUM(gmpnum_result);
        if (use_ui) {
                mpz_powm_ui(*gmpnum_result, *gmpnum_base, (unsigned long)Z_LVAL_PP(exp_arg), *gmpnum_mod);