diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2020-11-04 10:55:59 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2020-11-04 10:55:59 +0100 |
commit | c6563dddacb39be6d0716738c2538d0aa8622da3 (patch) | |
tree | fe5e18e00561d71e8bc3d28bdd90af15d22b03ba | |
parent | 54668a449e2e535f638b6b0bc22c8c3956e534a2 (diff) | |
parent | e0d6c3f7bae2644802f13bd1ae1f49c3d08a8e07 (diff) | |
download | php-git-c6563dddacb39be6d0716738c2538d0aa8622da3.tar.gz |
Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
Fix dynamic function definition in preload script
-rw-r--r-- | Zend/zend_compile.c | 3 | ||||
-rw-r--r-- | ext/opcache/tests/preload_dynamic_function.inc | 4 | ||||
-rw-r--r-- | ext/opcache/tests/preload_dynamic_function.phpt | 18 |
3 files changed, 24 insertions, 1 deletions
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index af137e424d..396cfd91c0 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -1082,7 +1082,8 @@ ZEND_API zend_result do_bind_function(zval *lcname) /* {{{ */ return FAILURE; } function = (zend_function*)Z_PTR_P(zv); - if (UNEXPECTED(function->common.fn_flags & ZEND_ACC_PRELOADED)) { + if (UNEXPECTED(function->common.fn_flags & ZEND_ACC_PRELOADED) + && !(CG(compiler_options) & ZEND_COMPILE_PRELOAD)) { zv = zend_hash_add(EG(function_table), Z_STR_P(lcname), zv); } else { zv = zend_hash_set_bucket_key(EG(function_table), (Bucket*)zv, Z_STR_P(lcname)); diff --git a/ext/opcache/tests/preload_dynamic_function.inc b/ext/opcache/tests/preload_dynamic_function.inc new file mode 100644 index 0000000000..3caa9592b8 --- /dev/null +++ b/ext/opcache/tests/preload_dynamic_function.inc @@ -0,0 +1,4 @@ +<?php +if (1) { + function f() {} +} diff --git a/ext/opcache/tests/preload_dynamic_function.phpt b/ext/opcache/tests/preload_dynamic_function.phpt new file mode 100644 index 0000000000..451a58eb34 --- /dev/null +++ b/ext/opcache/tests/preload_dynamic_function.phpt @@ -0,0 +1,18 @@ +--TEST-- +Defining a dynamic function inside the preload script +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +opcache.optimization_level=-1 +opcache.preload={PWD}/preload_dynamic_function.inc +--SKIPIF-- +<?php +require_once('skipif.inc'); +if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows'); +?> +--FILE-- +<?php +var_dump(function_exists("f")); +?> +--EXPECT-- +bool(true) |