diff options
| author | Dmitry Stogov <dmitry@zend.com> | 2015-06-16 13:29:17 +0300 |
|---|---|---|
| committer | Dmitry Stogov <dmitry@zend.com> | 2015-06-16 13:29:17 +0300 |
| commit | 3180b8e100285e5bd9088e9981608dfd14f6ff27 (patch) | |
| tree | a6f6318962ed0ee36b5b6b03a7cdad636fb7268c /Zend/zend_closures.c | |
| parent | ed84bff44569d3b7e2f79255208e69bbe755d6a9 (diff) | |
| download | php-git-3180b8e100285e5bd9088e9981608dfd14f6ff27.tar.gz | |
Fixed bug #69802 (Reflection on Closure::__invoke borks type hint class name) (onr more problem)
Diffstat (limited to 'Zend/zend_closures.c')
| -rw-r--r-- | Zend/zend_closures.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/Zend/zend_closures.c b/Zend/zend_closures.c index 2d38fb2f4c..b28810a236 100644 --- a/Zend/zend_closures.c +++ b/Zend/zend_closures.c @@ -214,7 +214,11 @@ ZEND_API zend_function *zend_get_closure_invoke_method(zend_object *object) /* { * ZEND_ACC_USER_ARG_INFO flag to prevent invalid usage by Reflection */ invoke->type = ZEND_INTERNAL_FUNCTION; invoke->internal_function.fn_flags = - ZEND_ACC_PUBLIC | ZEND_ACC_CALL_VIA_HANDLER | ZEND_ACC_USER_ARG_INFO | (closure->func.common.fn_flags & keep_flags); + ZEND_ACC_PUBLIC | ZEND_ACC_CALL_VIA_HANDLER | (closure->func.common.fn_flags & keep_flags); + if (closure->func.type != ZEND_INTERNAL_FUNCTION || (closure->func.common.fn_flags & ZEND_ACC_USER_ARG_INFO)) { + invoke->internal_function.fn_flags |= + ZEND_ACC_USER_ARG_INFO; + } invoke->internal_function.handler = ZEND_MN(Closure___invoke); invoke->internal_function.module = 0; invoke->internal_function.scope = zend_ce_closure; @@ -488,7 +492,7 @@ ZEND_API void zend_create_closure(zval *res, zend_function *func, zend_class_ent closure = (zend_closure *)Z_OBJ_P(res); - closure->func = *func; + memcpy(&closure->func, func, func->type == ZEND_USER_FUNCTION ? sizeof(zend_op_array) : sizeof(zend_internal_function)); closure->func.common.prototype = (zend_function*)closure; closure->func.common.fn_flags |= ZEND_ACC_CLOSURE; |
