]> granicus.if.org Git - php/commitdiff
Promote warning to error in zend_forbid_dynamic_call()
authorGeorge Peter Banyard <girgias@php.net>
Wed, 21 Aug 2019 17:35:35 +0000 (19:35 +0200)
committerGeorge Peter Banyard <girgias@php.net>
Fri, 23 Aug 2019 18:01:51 +0000 (20:01 +0200)
Zend/tests/bug71221.phpt
Zend/tests/bug72107.phpt
Zend/tests/dynamic_call_005.phpt
Zend/tests/dynamic_call_006.phpt
Zend/tests/dynamic_call_007.phpt
Zend/tests/dynamic_call_008.phpt
Zend/zend_API.h
ext/standard/tests/array/bug71220.phpt

index 0f6ee16946232e770e8e505dde8f427d39660b20..eeba6450ab90f9c9285728d686947d6ea6eb17cc 100644 (file)
@@ -3,8 +3,14 @@ Bug #71221 (Null pointer deref (segfault) in get_defined_vars via ob_start)
 --FILE--
 <?php
 ob_start("get_defined_vars");
-ob_end_clean();
+try {
+    ob_end_clean();
+} catch (\Error $e) {
+    echo $e->getMessage();
+}
 ?>
-okey
+
+OKAY
 --EXPECT--
-okey
+Cannot call get_defined_vars() dynamically
+OKAY
index 3f4c46cf70c7a059a01af6ac56987a45a7118b3e..c22f657ebbca1e06def1945df172878568a4a58b 100644 (file)
@@ -6,9 +6,11 @@ set_error_handler('func_get_args');
 function test($a) {
     echo $undef;
 }
-test(1);
+try {
+    test(1);
+} catch (\Error $e) {
+    echo $e->getMessage();
+}
 ?>
---EXPECTF--
-Warning: Cannot call func_get_args() dynamically in %s on line %d
-
-Notice: Undefined variable: undef in %s on line %d
+--EXPECT--
+Cannot call func_get_args() dynamically
index 840e298b826a3b9a02efeaf2fb330c03ab215c15..91d1cb914c12db700a3d8a4a75be228f19faa360 100644 (file)
@@ -6,24 +6,31 @@ Dynamic calls to scope introspection functions are forbidden
 function test_calls($func) {
     $i = 1;
 
-    array_map($func, [['i' => new stdClass]]);
-    var_dump($i);
+    try {
+        array_map($func, [['i' => new stdClass]]);
+        var_dump($i);
+    } catch (\Error $e) {
+        echo $e->getMessage() . "\n";
+    }
 
-    $func(['i' => new stdClass]);
-    var_dump($i);
+    try {
+        $func(['i' => new stdClass]);
+        var_dump($i);
+    } catch (\Error $e) {
+        echo $e->getMessage() . "\n";
+    }
 
-    call_user_func($func, ['i' => new stdClass]);
-    var_dump($i);
+    try {
+        call_user_func($func, ['i' => new stdClass]);
+        var_dump($i);
+    } catch (\Error $e) {
+        echo $e->getMessage() . "\n";
+    }
 }
 test_calls('extract');
 
 ?>
---EXPECTF--
-Warning: Cannot call extract() dynamically in %s on line %d
-int(1)
-
-Warning: Cannot call extract() dynamically in %s on line %d
-int(1)
-
-Warning: Cannot call extract() dynamically in %s on line %d
-int(1)
+--EXPECT--
+Cannot call extract() dynamically
+Cannot call extract() dynamically
+Cannot call extract() dynamically
index 7a2872bccac34dfdf2529a02ed94463a8d670669..e6ea719158543815f9ad6b491975b4d4aae70c72 100644 (file)
@@ -3,36 +3,56 @@ Dynamic calls to scope introspection functions are forbidden (function variation
 --FILE--
 <?php
 function test() {
-    $func = 'extract';
-    $func(['a' => 'b']);
 
-    $func = 'compact';
-    $func(['a']);
-
-    $func = 'get_defined_vars';
-    $func();
-
-    $func = 'func_get_args';
-    $func();
-
-    $func = 'func_get_arg';
-    $func(1);
-
-    $func = 'func_num_args';
-    $func();
+    try {
+        $func = 'extract';
+        $func(['a' => 'b']);
+    } catch (\Error $e) {
+        echo $e->getMessage() . "\n";
+    }
+
+    try {
+        $func = 'compact';
+        $func(['a']);
+    } catch (\Error $e) {
+        echo $e->getMessage() . "\n";
+    }
+
+    try {
+        $func = 'get_defined_vars';
+        $func();
+    } catch (\Error $e) {
+        echo $e->getMessage() . "\n";
+    }
+
+    try {
+        $func = 'func_get_args';
+        $func();
+    } catch (\Error $e) {
+        echo $e->getMessage() . "\n";
+    }
+
+    try {
+        $func = 'func_get_arg';
+        $func(1);
+    } catch (\Error $e) {
+        echo $e->getMessage() . "\n";
+    }
+
+    try {
+        $func = 'func_num_args';
+        $func();
+    } catch (\Error $e) {
+        echo $e->getMessage() . "\n";
+    }
 }
 test();
 
 ?>
---EXPECTF--
-Warning: Cannot call extract() dynamically in %s on line %d
-
-Warning: Cannot call compact() dynamically in %s on line %d
-
-Warning: Cannot call get_defined_vars() dynamically in %s on line %d
-
-Warning: Cannot call func_get_args() dynamically in %s on line %d
-
-Warning: Cannot call func_get_arg() dynamically in %s on line %d
-
-Warning: Cannot call func_num_args() dynamically in %s on line %d
+--EXPECT--
+Cannot call extract() dynamically
+Cannot call compact() dynamically
+Cannot call get_defined_vars() dynamically
+Cannot call func_get_args() dynamically
+Cannot call func_get_arg() dynamically
+Cannot call func_num_args() dynamically
index 61ae18291418f6c54d23072a6b8fe1351f058bb4..f1312b95b47a3674dbe99dfd59837438c171d45f 100644 (file)
@@ -5,13 +5,17 @@ Dynamic calls to scope introspection functions are forbidden (misoptimization)
 
 function test() {
     $i = 1;
-    array_map('extract', [['i' => new stdClass]]);
+    try {
+        array_map('extract', [['i' => new stdClass]]);
+    } catch (\Error $e) {
+        echo $e->getMessage() . "\n";
+    }
     $i += 1;
     var_dump($i);
 }
 test();
 
 ?>
---EXPECTF--
-Warning: Cannot call extract() dynamically in %s on line %d
+--EXPECT--
+Cannot call extract() dynamically
 int(2)
index 24240472d16ef0de8edac9b8f3cc7852996f9f8d..1916bcf91345c73be1be7f1c42e4413f80d60633 100644 (file)
@@ -4,10 +4,14 @@ Don't optimize dynamic call to non-dynamic one if it drops the warning
 <?php
 
 function test() {
-    ((string) 'extract')(['a' => 42]);
+    try {
+        ((string) 'extract')(['a' => 42]);
+    } catch (\Error $e) {
+        echo $e->getMessage() . "\n";
+    }
 }
 test();
 
 ?>
---EXPECTF--
-Warning: Cannot call extract() dynamically in %s on line %d
+--EXPECT--
+Cannot call extract() dynamically
index ce641dff39f4e51c849651cf3ceedd5b409d2dc1..5cdba4450b5d64c299d8bf0456250a64b4e07f9a 100644 (file)
@@ -538,7 +538,7 @@ static zend_always_inline int zend_forbid_dynamic_call(const char *func_name)
        ZEND_ASSERT(ex != NULL && ex->func != NULL);
 
        if (ZEND_CALL_INFO(ex) & ZEND_CALL_DYNAMIC) {
-               zend_error(E_WARNING, "Cannot call %s dynamically", func_name);
+               zend_throw_error(NULL, "Cannot call %s dynamically", func_name);
                return FAILURE;
        }
 
index 49e5bb7719241bd851ef89313c36222a0899bf90..ed46b25e186d0fcd4b4cd2c9ba6b695e233bdceb 100644 (file)
@@ -3,8 +3,14 @@ Bug #71220 (Null pointer deref (segfault) in compact via ob_start)
 --FILE--
 <?php
 ob_start("compact");
-ob_end_clean();
+try {
+    ob_end_clean();
+} catch (\Error $e) {
+    echo $e->getMessage();
+}
 ?>
-okey
+
+OKAY
 --EXPECT--
-okey
+Cannot call compact() dynamically
+OKAY