@@ -1261,6 +1261,20 @@ ZEND_API zend_result do_bind_function(zend_function *func, zval *lcname) /* {{{
12611261{
12621262 zend_function * added_func = zend_hash_add_ptr (EG (function_table ), Z_STR_P (lcname ), func );
12631263 if (UNEXPECTED (!added_func )) {
1264+ /* If a function name was marked as using the global name, properly declare the namespaced function */
1265+ zend_function * old_func = zend_hash_find_ptr (EG (function_table ), Z_STR_P (lcname ));
1266+ if (old_func == (zend_function * ) & zend_pass_function ) {
1267+ zend_hash_update_ptr (EG (function_table ), Z_STR_P (lcname ), func );
1268+ if (func -> op_array .refcount ) {
1269+ ++ * func -> op_array .refcount ;
1270+ }
1271+ if (func -> common .function_name ) {
1272+ zend_string_addref (func -> common .function_name );
1273+ }
1274+ zend_observer_function_declared_notify (& func -> op_array , Z_STR_P (lcname ));
1275+ return SUCCESS ;
1276+ }
1277+
12641278 do_bind_function_error (Z_STR_P (lcname ), & func -> op_array , 0 );
12651279 return FAILURE ;
12661280 }
@@ -1271,7 +1285,9 @@ ZEND_API zend_result do_bind_function(zend_function *func, zval *lcname) /* {{{
12711285 if (func -> common .function_name ) {
12721286 zend_string_addref (func -> common .function_name );
12731287 }
1274- zend_observer_function_declared_notify (& func -> op_array , Z_STR_P (lcname ));
1288+ if (EXPECTED (func != (zend_function * ) & zend_pass_function )) {
1289+ zend_observer_function_declared_notify (& func -> op_array , Z_STR_P (lcname ));
1290+ }
12751291 return SUCCESS ;
12761292}
12771293/* }}} */
0 commit comments