From: Dmitry Stogov Date: Thu, 7 Mar 2013 04:13:58 +0000 (+0400) Subject: fixed memory leaks X-Git-Tag: php-5.5.0beta1~42^2~8 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b54351134314737374721a3f5d1d043a86f067aa;p=php fixed memory leaks --- diff --git a/Optimizer/block_pass.c b/Optimizer/block_pass.c index 9922cbdb48..a1fc760e73 100644 --- a/Optimizer/block_pass.c +++ b/Optimizer/block_pass.c @@ -172,12 +172,12 @@ static int find_code_blocks(zend_op_array *op_array, zend_cfg *cfg) * exception handling */ if (op_array->last_brk_cont) { int i, j; - cfg->loop_start = ecalloc(op_array->last_brk_cont, sizeof(zend_code_block *)); - cfg->loop_cont = ecalloc(op_array->last_brk_cont, sizeof(zend_code_block *)); - cfg->loop_brk = ecalloc(op_array->last_brk_cont, sizeof(zend_code_block *)); + j = 0; for (i = 0; i< op_array->last_brk_cont; i++) { - if (op_array->brk_cont_array[i].start >= 0) { + if (op_array->brk_cont_array[i].start >= 0 && + (op_array->opcodes[op_array->brk_cont_array[i].brk].opcode == ZEND_FREE || + op_array->opcodes[op_array->brk_cont_array[i].brk].opcode == ZEND_SWITCH_FREE)) { int parent = op_array->brk_cont_array[i].parent; while (parent >= 0 && @@ -191,6 +191,9 @@ static int find_code_blocks(zend_op_array *op_array, zend_cfg *cfg) } } if (j) { + cfg->loop_start = ecalloc(op_array->last_brk_cont, sizeof(zend_code_block *)); + cfg->loop_cont = ecalloc(op_array->last_brk_cont, sizeof(zend_code_block *)); + cfg->loop_brk = ecalloc(op_array->last_brk_cont, sizeof(zend_code_block *)); j = 0; for (i = 0; i< op_array->last_brk_cont; i++) { if (op_array->brk_cont_array[i].start >= 0 && @@ -212,13 +215,7 @@ static int find_code_blocks(zend_op_array *op_array, zend_cfg *cfg) } op_array->last_brk_cont = j; } else { - efree(cfg->loop_start); - efree(cfg->loop_cont); - efree(cfg->loop_brk); efree(op_array->brk_cont_array); - cfg->loop_start = NULL; - cfg->loop_cont = NULL; - cfg->loop_brk = NULL; op_array->brk_cont_array = NULL; op_array->last_brk_cont = 0; }