Commit:    b54351134314737374721a3f5d1d043a86f067aa
Author:    Dmitry Stogov <dmi...@zend.com>         Thu, 7 Mar 2013 08:13:58 
+0400
Parents:   1143d3b1d012ded505bf3e4525ae86f95b729dd9
Branches:  PHP-5.5 master

Link:       
http://git.php.net/?p=php-src.git;a=commitdiff;h=b54351134314737374721a3f5d1d043a86f067aa

Log:
fixed memory leaks

Changed paths:
  M  Optimizer/block_pass.c


Diff:
diff --git a/Optimizer/block_pass.c b/Optimizer/block_pass.c
index 9922cbd..a1fc760 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;
                }


--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to