diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2020-01-17 11:38:18 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2020-01-17 11:38:18 +0100 |
commit | 117b18d22d14fb6a597b3cd6d52e75cef2d088bb (patch) | |
tree | 90775448750a8edfc52332da6e028de894bf0212 | |
parent | 9ec1ee5976f4c0131943cc8863a344caf5492773 (diff) | |
parent | 384dfe331b9431ee7b614412aea5cf887469e8ff (diff) | |
download | php-git-117b18d22d14fb6a597b3cd6d52e75cef2d088bb.tar.gz |
Merge branch 'PHP-7.4'
* PHP-7.4:
Fixed bug #79115
-rw-r--r-- | ext/reflection/php_reflection.c | 2 | ||||
-rw-r--r-- | ext/reflection/tests/bug79115.phpt | 16 |
2 files changed, 18 insertions, 0 deletions
diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index b240d233f7..a3cd824fdd 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -4604,6 +4604,8 @@ ZEND_METHOD(reflection_class, isCloneable) if (UNEXPECTED(object_init_ex(&obj, ce) != SUCCESS)) { return; } + /* We're not calling the constructor, so don't call the destructor either. */ + zend_object_store_ctor_failed(Z_OBJ(obj)); RETVAL_BOOL(Z_OBJ_HANDLER(obj, clone_obj) != NULL); zval_ptr_dtor(&obj); } diff --git a/ext/reflection/tests/bug79115.phpt b/ext/reflection/tests/bug79115.phpt new file mode 100644 index 0000000000..b8ba6f1d7f --- /dev/null +++ b/ext/reflection/tests/bug79115.phpt @@ -0,0 +1,16 @@ +--TEST-- +Bug #79115: ReflectionClass::isCloneable call reflected class __destruct +--FILE-- +<?php + +class A { + function __construct() { echo __FUNCTION__ . "\n"; } + function __destruct() { echo __FUNCTION__ . "\n"; } +} + +$c = new ReflectionClass('A'); +var_dump($c->isCloneable()); + +?> +--EXPECT-- +bool(true) |