Skip to content

Commit b543511

Browse files
committed
fixed memory leaks
1 parent 1143d3b commit b543511

File tree

1 file changed

+7
-10
lines changed

1 file changed

+7
-10
lines changed

Optimizer/block_pass.c

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -172,12 +172,12 @@ static int find_code_blocks(zend_op_array *op_array, zend_cfg *cfg)
172172
* exception handling */
173173
if (op_array->last_brk_cont) {
174174
int i, j;
175-
cfg->loop_start = ecalloc(op_array->last_brk_cont, sizeof(zend_code_block *));
176-
cfg->loop_cont = ecalloc(op_array->last_brk_cont, sizeof(zend_code_block *));
177-
cfg->loop_brk = ecalloc(op_array->last_brk_cont, sizeof(zend_code_block *));
175+
178176
j = 0;
179177
for (i = 0; i< op_array->last_brk_cont; i++) {
180-
if (op_array->brk_cont_array[i].start >= 0) {
178+
if (op_array->brk_cont_array[i].start >= 0 &&
179+
(op_array->opcodes[op_array->brk_cont_array[i].brk].opcode == ZEND_FREE ||
180+
op_array->opcodes[op_array->brk_cont_array[i].brk].opcode == ZEND_SWITCH_FREE)) {
181181
int parent = op_array->brk_cont_array[i].parent;
182182

183183
while (parent >= 0 &&
@@ -191,6 +191,9 @@ static int find_code_blocks(zend_op_array *op_array, zend_cfg *cfg)
191191
}
192192
}
193193
if (j) {
194+
cfg->loop_start = ecalloc(op_array->last_brk_cont, sizeof(zend_code_block *));
195+
cfg->loop_cont = ecalloc(op_array->last_brk_cont, sizeof(zend_code_block *));
196+
cfg->loop_brk = ecalloc(op_array->last_brk_cont, sizeof(zend_code_block *));
194197
j = 0;
195198
for (i = 0; i< op_array->last_brk_cont; i++) {
196199
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)
212215
}
213216
op_array->last_brk_cont = j;
214217
} else {
215-
efree(cfg->loop_start);
216-
efree(cfg->loop_cont);
217-
efree(cfg->loop_brk);
218218
efree(op_array->brk_cont_array);
219-
cfg->loop_start = NULL;
220-
cfg->loop_cont = NULL;
221-
cfg->loop_brk = NULL;
222219
op_array->brk_cont_array = NULL;
223220
op_array->last_brk_cont = 0;
224221
}

0 commit comments

Comments
 (0)