From: Dmitry Stogov Date: Wed, 29 Aug 2018 20:40:17 +0000 (+0300) Subject: Fixed incorrect ZEND_ACC_ARENA_ALLOCATED usage (it must be used only for internal... X-Git-Tag: php-7.3.0RC1~43^2^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=709e4e4f17ddbeb99b366c293c3e2eaa16480a7a;p=php Fixed incorrect ZEND_ACC_ARENA_ALLOCATED usage (it must be used only for internal functions). --- diff --git a/Zend/zend_inheritance.c b/Zend/zend_inheritance.c index 16c8f9d659..b0c1f0ac37 100644 --- a/Zend/zend_inheritance.c +++ b/Zend/zend_inheritance.c @@ -1224,10 +1224,15 @@ static void zend_add_trait_method(zend_class_entry *ce, const char *name, zend_s } } - function_add_ref(fn); - new_fn = zend_arena_alloc(&CG(arena), sizeof(zend_op_array)); - memcpy(new_fn, fn, sizeof(zend_op_array)); - new_fn->common.fn_flags |= ZEND_ACC_ARENA_ALLOCATED; + if (UNEXPECTED(fn->type == ZEND_INTERNAL_FUNCTION)) { + new_fn = zend_arena_alloc(&CG(arena), sizeof(zend_internal_function)); + memcpy(new_fn, fn, sizeof(zend_internal_function)); + new_fn->common.fn_flags |= ZEND_ACC_ARENA_ALLOCATED; + } else { + function_add_ref(fn); + new_fn = zend_arena_alloc(&CG(arena), sizeof(zend_op_array)); + memcpy(new_fn, fn, sizeof(zend_op_array)); + } fn = zend_hash_update_ptr(&ce->function_table, key, new_fn); zend_add_magic_methods(ce, key, fn); }