Fix Closure leak in aborted INIT_DYNAMIC_FCALL

This commit is contained in:
Bob Weinand 2015-06-26 05:10:58 +02:00
parent bc0df38e88
commit 1335ebd068
2 changed files with 17 additions and 0 deletions

View file

@ -0,0 +1,14 @@
--FILE--
Closure must not leak during a dynmaic call interrupted by an exception
--TEST--
<?php
(function() {
$closure = function($foo) { var_dump($foo); };
$closure(yield);
})()->valid(); // start
?>
==DONE==
--EXPECT--
==DONE==

View file

@ -2486,6 +2486,9 @@ static zend_always_inline void i_cleanup_unfinished_execution(zend_execute_data
}
OBJ_RELEASE(Z_OBJ(call->This));
}
if (call->func->common.fn_flags & ZEND_ACC_CLOSURE) {
zend_object_release(call->func->common.prototype);
}
if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
zend_string_release(call->func->common.function_name);
zend_free_trampoline(call->func);