diff options
author | Dmitry Stogov <dmitry@zend.com> | 2018-08-29 23:41:14 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2018-08-29 23:41:14 +0300 |
commit | fd5a453cb9976af6f1f9e1a72135c03804f208f6 (patch) | |
tree | 988dcd58c14c9a01e8cb82c991f92e6144719db9 /Zend | |
parent | 7881e92c2440b34640b9210125a9862bee06bc71 (diff) | |
parent | 709e4e4f17ddbeb99b366c293c3e2eaa16480a7a (diff) | |
download | php-git-fd5a453cb9976af6f1f9e1a72135c03804f208f6.tar.gz |
Merge branch 'PHP-7.1' into PHP-7.2
* PHP-7.1:
Fixed incorrect ZEND_ACC_ARENA_ALLOCATED usage (it must be used only for internal functions).
Diffstat (limited to 'Zend')
-rw-r--r-- | Zend/zend_inheritance.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/Zend/zend_inheritance.c b/Zend/zend_inheritance.c index 8d11513090..2b41f109cd 100644 --- a/Zend/zend_inheritance.c +++ b/Zend/zend_inheritance.c @@ -1209,10 +1209,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); } |