Browse Source

Fix memleak in generators using symtable

pull/1279/head
Bob Weinand 11 years ago
parent
commit
c6a6b9746d
  1. 20
      Zend/tests/generators/generator_symtable_leak.phpt
  2. 6
      Zend/zend_generators.c

20
Zend/tests/generators/generator_symtable_leak.phpt

@ -0,0 +1,20 @@
--TEST--
Generators using symtables must not leak
--FILE--
<?php
function gen() {
$bar = ["some complex var"];
${"f"."oo"} = "force symtable usage";
var_dump($bar);
yield;
}
gen()->valid();
?>
--EXPECT--
array(1) {
[0]=>
string(16) "some complex var"
}

6
Zend/zend_generators.c

@ -104,11 +104,11 @@ ZEND_API void zend_generator_close(zend_generator *generator, zend_bool finished
if (generator->execute_data) {
zend_execute_data *execute_data = generator->execute_data;
if (!execute_data->symbol_table) {
zend_free_compiled_variables(execute_data);
} else {
if (execute_data->symbol_table) {
zend_clean_and_cache_symbol_table(execute_data->symbol_table);
}
/* always free the CV's, in the symtable are only not-free'd IS_INDIRECT's */
zend_free_compiled_variables(execute_data);
if (Z_OBJ(execute_data->This)) {
OBJ_RELEASE(Z_OBJ(execute_data->This));

Loading…
Cancel
Save