summaryrefslogtreecommitdiff
path: root/Zend/zend_generators.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2016-04-04 09:35:48 +0300
committerDmitry Stogov <dmitry@zend.com>2016-04-04 09:35:48 +0300
commite7730fece6bc68bc3c2835c3fd3da4999496878c (patch)
tree30ce73b97c7bd61e4dca95202a55aa3767d3ee3b /Zend/zend_generators.c
parentf1fca16f7ad74ad221f1caf45294cb9886a1f487 (diff)
downloadphp-git-e7730fece6bc68bc3c2835c3fd3da4999496878c.tar.gz
Fised possible use-after-free
Diffstat (limited to 'Zend/zend_generators.c')
-rw-r--r--Zend/zend_generators.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c
index 8dfa2a9754..cbcc774c5e 100644
--- a/Zend/zend_generators.c
+++ b/Zend/zend_generators.c
@@ -334,8 +334,9 @@ ZEND_API void zend_generator_create_zval(zend_execute_data *call, zend_op_array
object_init_ex(return_value, zend_ce_generator);
- if (ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS) {
- Z_ADDREF(call->This);
+ if (Z_TYPE(EX(This)) == IS_OBJECT && !(EX_CALL_INFO() & ZEND_CALL_CLOSURE)) {
+ ZEND_ADD_CALL_FLAG(execute_data, ZEND_CALL_RELEASE_THIS);
+ Z_ADDREF(EX(This));
}
/* Save execution context in generator object. */