]> granicus.if.org Git - php/commitdiff
Fixed run-time binding of preloaded dynamically declared function
authorDmitry Stogov <dmitry@zend.com>
Wed, 28 Oct 2020 10:50:14 +0000 (13:50 +0300)
committerDmitry Stogov <dmitry@zend.com>
Wed, 28 Oct 2020 10:50:14 +0000 (13:50 +0300)
NEWS
Zend/zend_compile.c

diff --git a/NEWS b/NEWS
index c848134c7cc5708b59c65141e95d86f912382feb..64968cb7ddc6e90de1fdb05646ddcd0f440f437e 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -25,6 +25,7 @@ PHP                                                                        NEWS
 - Opcache:
   . Fixed bug #79643 (PHP with Opcache crashes when a file with specific name
     is included). (twosee)
+  . Fixed run-time binding of preloaded dynamically declared function. (Dmitry)
 
 - OpenSSL:
   . Fixed bug #79983 (openssl_encrypt / openssl_decrypt fail with OCB mode).
index 10ea65f89d9ab3a5b350afc9929cd611d15e69e4..810e384177ecdde4270d932d1ed6a756ada17394 100644 (file)
@@ -1050,7 +1050,11 @@ ZEND_API int do_bind_function(zval *lcname) /* {{{ */
                return FAILURE;
        }
        function = (zend_function*)Z_PTR_P(zv);
-       zv = zend_hash_set_bucket_key(EG(function_table), (Bucket*)zv, Z_STR_P(lcname));
+       if (UNEXPECTED(function->common.fn_flags & ZEND_ACC_PRELOADED)) {
+               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));
+       }
        if (UNEXPECTED(!zv)) {
                do_bind_function_error(Z_STR_P(lcname), &function->op_array, 0);
                return FAILURE;