summaryrefslogtreecommitdiff
path: root/Zend/zend_interfaces.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2018-06-25 23:01:21 +0300
committerDmitry Stogov <dmitry@zend.com>2018-06-25 23:01:21 +0300
commit49a4e695845bf55e059e7f88e54b1111fe284223 (patch)
treeaa23349704339980bad305f9495a9a987921118d /Zend/zend_interfaces.c
parentb89ce98129fb0e800df306125de94bead8e073c3 (diff)
downloadphp-git-49a4e695845bf55e059e7f88e54b1111fe284223.tar.gz
Fixed ability to call plain functions through zend_call_method()
Diffstat (limited to 'Zend/zend_interfaces.c')
-rw-r--r--Zend/zend_interfaces.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/Zend/zend_interfaces.c b/Zend/zend_interfaces.c
index 78c9253442..11cab80633 100644
--- a/Zend/zend_interfaces.c
+++ b/Zend/zend_interfaces.c
@@ -67,12 +67,19 @@ ZEND_API zval* zend_call_method(zval *object, zend_class_entry *obj_ce, zend_fun
obj_ce = object ? Z_OBJCE_P(object) : NULL;
}
if (!fn_proxy || !*fn_proxy) {
- HashTable *function_table = obj_ce ? &obj_ce->function_table : EG(function_table);
- fcic.function_handler = zend_hash_str_find_ptr(
- function_table, function_name, function_name_len);
- if (fcic.function_handler == NULL) {
- /* error at c-level */
- zend_error_noreturn(E_CORE_ERROR, "Couldn't find implementation for method %s%s%s", obj_ce ? ZSTR_VAL(obj_ce->name) : "", obj_ce ? "::" : "", function_name);
+ if (EXPECTED(obj_ce)) {
+ fcic.function_handler = zend_hash_str_find_ptr(
+ &obj_ce->function_table, function_name, function_name_len);
+ if (UNEXPECTED(fcic.function_handler == NULL)) {
+ /* error at c-level */
+ zend_error_noreturn(E_CORE_ERROR, "Couldn't find implementation for method %s::%s", ZSTR_VAL(obj_ce->name), function_name);
+ }
+ } else {
+ fcic.function_handler = zend_fetch_function_str(function_name, function_name_len);
+ if (UNEXPECTED(fcic.function_handler == NULL)) {
+ /* error at c-level */
+ zend_error_noreturn(E_CORE_ERROR, "Couldn't find implementation for function %s", function_name);
+ }
}
if (fn_proxy) {
*fn_proxy = fcic.function_handler;