diff --git a/Zend/tests/bug71221.phpt b/Zend/tests/bug71221.phpt index 0f6ee16946232..eeba6450ab90f 100644 --- a/Zend/tests/bug71221.phpt +++ b/Zend/tests/bug71221.phpt @@ -3,8 +3,14 @@ Bug #71221 (Null pointer deref (segfault) in get_defined_vars via ob_start) --FILE-- getMessage(); +} ?> -okey + +OKAY --EXPECT-- -okey +Cannot call get_defined_vars() dynamically +OKAY diff --git a/Zend/tests/bug72107.phpt b/Zend/tests/bug72107.phpt index 3f4c46cf70c7a..c22f657ebbca1 100644 --- a/Zend/tests/bug72107.phpt +++ b/Zend/tests/bug72107.phpt @@ -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 diff --git a/Zend/tests/dynamic_call_005.phpt b/Zend/tests/dynamic_call_005.phpt index 840e298b826a3..91d1cb914c12d 100644 --- a/Zend/tests/dynamic_call_005.phpt +++ b/Zend/tests/dynamic_call_005.phpt @@ -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 diff --git a/Zend/tests/dynamic_call_006.phpt b/Zend/tests/dynamic_call_006.phpt index 7a2872bccac34..e6ea719158543 100644 --- a/Zend/tests/dynamic_call_006.phpt +++ b/Zend/tests/dynamic_call_006.phpt @@ -3,36 +3,56 @@ Dynamic calls to scope introspection functions are forbidden (function variation --FILE-- '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 diff --git a/Zend/tests/dynamic_call_007.phpt b/Zend/tests/dynamic_call_007.phpt index 61ae18291418f..f1312b95b47a3 100644 --- a/Zend/tests/dynamic_call_007.phpt +++ b/Zend/tests/dynamic_call_007.phpt @@ -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) diff --git a/Zend/tests/dynamic_call_008.phpt b/Zend/tests/dynamic_call_008.phpt index 24240472d16ef..1916bcf91345c 100644 --- a/Zend/tests/dynamic_call_008.phpt +++ b/Zend/tests/dynamic_call_008.phpt @@ -4,10 +4,14 @@ Don't optimize dynamic call to non-dynamic one if it drops the warning 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 diff --git a/Zend/zend_API.h b/Zend/zend_API.h index ce641dff39f4e..5cdba4450b5d6 100644 --- a/Zend/zend_API.h +++ b/Zend/zend_API.h @@ -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; } diff --git a/ext/standard/tests/array/bug71220.phpt b/ext/standard/tests/array/bug71220.phpt index 49e5bb7719241..ed46b25e186d0 100644 --- a/ext/standard/tests/array/bug71220.phpt +++ b/ext/standard/tests/array/bug71220.phpt @@ -3,8 +3,14 @@ Bug #71220 (Null pointer deref (segfault) in compact via ob_start) --FILE-- getMessage(); +} ?> -okey + +OKAY --EXPECT-- -okey +Cannot call compact() dynamically +OKAY