Revert "ext/gmp: gmp_pow fix FPE with large values" patch
authorOndřej Surý <ondrej@sury.org>
Mon, 25 Nov 2024 17:19:14 +0000 (18:19 +0100)
committerOndřej Surý <ondrej@debian.org>
Mon, 2 Dec 2024 07:33:26 +0000 (08:33 +0100)
Gbp-Pq: Name 0049-Revert-ext-gmp-gmp_pow-fix-FPE-with-large-values-pat.patch

ext/gmp/gmp.c
ext/gmp/tests/gmp_pow.phpt
ext/gmp/tests/gmp_pow_32bits.phpt [deleted file]
ext/gmp/tests/gmp_pow_fpe.phpt [deleted file]

index c9603c8fb21e88fad1fe77e4047247b88ab434b9..f31d6ab81023271dc79c8aaf9433bc0354a4775f 100644 (file)
@@ -1350,26 +1350,13 @@ ZEND_FUNCTION(gmp_pow)
                RETURN_THROWS();
        }
 
-    double powmax = log((double)ZEND_LONG_MAX);
-
        if (Z_TYPE_P(base_arg) == IS_LONG && Z_LVAL_P(base_arg) >= 0) {
                INIT_GMP_RETVAL(gmpnum_result);
-               if ((log(Z_LVAL_P(base_arg)) * exp) > powmax) {
-                       zend_value_error("base and exponent overflow");
-                       RETURN_THROWS();
-               }
                mpz_ui_pow_ui(gmpnum_result, Z_LVAL_P(base_arg), exp);
        } else {
                mpz_ptr gmpnum_base;
-               zend_ulong gmpnum;
                FETCH_GMP_ZVAL(gmpnum_base, base_arg, temp_base, 1);
                INIT_GMP_RETVAL(gmpnum_result);
-               gmpnum = mpz_get_ui(gmpnum_base);
-               if ((log(gmpnum) * exp) > powmax) {
-                       FREE_GMP_TEMP(temp_base);
-                       zend_value_error("base and exponent overflow");
-                       RETURN_THROWS();
-               }
                mpz_pow_ui(gmpnum_result, gmpnum_base, exp);
                FREE_GMP_TEMP(temp_base);
        }
index 1d77bd5e96c80896343b9093208f6a8a09ff5015..f42e44e31abeda1d660ec3ca9b8ff344ecd5a66e 100644 (file)
@@ -2,8 +2,6 @@
 gmp_pow() basic tests
 --EXTENSIONS--
 gmp
---SKIPIF--
-<?php if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only"); ?>
 --FILE--
 <?php
 
diff --git a/ext/gmp/tests/gmp_pow_32bits.phpt b/ext/gmp/tests/gmp_pow_32bits.phpt
deleted file mode 100644 (file)
index 785e1fc..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
---TEST--
-gmp_pow() basic tests
---EXTENSIONS--
-gmp
---SKIPIF--
-<?php if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only"); ?>
---FILE--
-<?php
-
-var_dump(gmp_strval(gmp_pow(2,10)));
-var_dump(gmp_strval(gmp_pow(-2,10)));
-var_dump(gmp_strval(gmp_pow(-2,11)));
-var_dump(gmp_strval(gmp_pow("2",10)));
-var_dump(gmp_strval(gmp_pow("2",0)));
-try {
-    gmp_pow("2", -1);
-} catch (ValueError $exception) {
-    echo $exception->getMessage() . "\n";
-}
-var_dump(gmp_strval(gmp_pow("-2",10)));
-try {
-    gmp_pow(20,10);
-} catch (ValueError $exception) {
-    echo $exception->getMessage() . "\n";
-}
-try {
-    gmp_pow(50,10);
-} catch (ValueError $exception) {
-    echo $exception->getMessage() . "\n";
-}
-try {
-    gmp_pow(50,-5);
-} catch (ValueError $exception) {
-    echo $exception->getMessage() . "\n";
-}
-try {
-    $n = gmp_init("20");
-    gmp_pow($n,10);
-} catch (ValueError $exception) {
-    echo $exception->getMessage() . "\n";
-}
-try {
-    $n = gmp_init("-20");
-    gmp_pow($n,10);
-} catch (ValueError $exception) {
-    echo $exception->getMessage() . "\n";
-}
-try {
-    var_dump(gmp_pow(2,array()));
-} catch (TypeError $e) {
-    echo $e->getMessage(), "\n";
-}
-
-try {
-    var_dump(gmp_pow(array(),10));
-} catch (\TypeError $e) {
-    echo $e->getMessage() . \PHP_EOL;
-}
-
-echo "Done\n";
-?>
---EXPECT--
-string(4) "1024"
-string(4) "1024"
-string(5) "-2048"
-string(4) "1024"
-string(1) "1"
-gmp_pow(): Argument #2 ($exponent) must be greater than or equal to 0
-string(4) "1024"
-base and exponent overflow
-base and exponent overflow
-gmp_pow(): Argument #2 ($exponent) must be greater than or equal to 0
-base and exponent overflow
-base and exponent overflow
-gmp_pow(): Argument #2 ($exponent) must be of type int, array given
-gmp_pow(): Argument #1 ($num) must be of type GMP|string|int, array given
-Done
diff --git a/ext/gmp/tests/gmp_pow_fpe.phpt b/ext/gmp/tests/gmp_pow_fpe.phpt
deleted file mode 100644 (file)
index 248922e..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
---TEST--
-gmp_pow() floating point exception
---EXTENSIONS--
-gmp
---FILE--
-<?php
-$g = gmp_init(256);
-
-try {
-       gmp_pow($g, PHP_INT_MAX);
-} catch (\ValueError $e) {
-       echo $e->getMessage() . PHP_EOL;
-}
-try {
-       gmp_pow(256, PHP_INT_MAX);
-} catch (\ValueError $e) {
-       echo $e->getMessage() . PHP_EOL;
-}
-
-try {
-    gmp_pow(gmp_add(gmp_mul(gmp_init(PHP_INT_MAX), gmp_init(PHP_INT_MAX)), 3), 256);
-} catch (\ValueError $e) {
-       echo $e->getMessage() . PHP_EOL;
-}
-try {
-    gmp_pow(gmp_init(PHP_INT_MAX), 256);
-} catch (\ValueError $e) {
-       echo $e->getMessage();
-}
-?>
---EXPECTF--
-base and exponent overflow
-base and exponent overflow
-base and exponent overflow
-base and exponent overflow