From 91f5940329fede8a26b64e99d4d6d858fe8654cc Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Sun, 24 Apr 2016 23:49:52 +0200 Subject: Forbid dynamic calls to scope introspection functions Per RFC: https://wiki.php.net/rfc/forbid_dynamic_scope_introspection --- Zend/zend_execute_API.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'Zend/zend_execute_API.c') diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index 9817a5f88e..dba10e3564 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -756,7 +756,7 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache) / fci->object = (func->common.fn_flags & ZEND_ACC_STATIC) ? NULL : fci_cache->object; - call = zend_vm_stack_push_call_frame(ZEND_CALL_TOP_FUNCTION, + call = zend_vm_stack_push_call_frame(ZEND_CALL_TOP_FUNCTION | ZEND_CALL_DYNAMIC, func, fci->param_count, fci_cache->called_scope, fci->object); if (fci->object && (!EG(objects_store).object_buckets || @@ -1691,6 +1691,20 @@ ZEND_API int zend_set_local_var_str(const char *name, size_t len, zval *value, i } /* }}} */ +ZEND_API int zend_forbid_dynamic_call(const char *func_name) /* {{{ */ +{ + zend_execute_data *ex = EG(current_execute_data); + 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); + return FAILURE; + } + + return SUCCESS; +} +/* }}} */ + /* * Local variables: * tab-width: 4 -- cgit v1.2.1