diff options
author | Nikita Popov <nikic@php.net> | 2016-04-24 23:49:52 +0200 |
---|---|---|
committer | Nikita Popov <nikic@php.net> | 2016-05-24 20:48:24 +0200 |
commit | 91f5940329fede8a26b64e99d4d6d858fe8654cc (patch) | |
tree | b5874f30a7d0d3c4bec3503aeac4d5b097da9e43 /Zend/zend_execute_API.c | |
parent | 674297c7e41013c2c34d770051714518d0586271 (diff) | |
download | php-git-91f5940329fede8a26b64e99d4d6d858fe8654cc.tar.gz |
Forbid dynamic calls to scope introspection functions
Per RFC:
https://wiki.php.net/rfc/forbid_dynamic_scope_introspection
Diffstat (limited to 'Zend/zend_execute_API.c')
-rw-r--r-- | Zend/zend_execute_API.c | 16 |
1 files changed, 15 insertions, 1 deletions
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 |