Skip to content

Commit f31f464

Browse files
committed
Fix memory leak
Fixes oss-fuzz #52999
1 parent 1cd2170 commit f31f464

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

Zend/Optimizer/dfa_pass.c

+3-1
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,9 @@ static bool opline_supports_assign_contraction(
369369

370370
if ((opline->opcode == ZEND_ASSIGN_OP
371371
|| opline->opcode == ZEND_ASSIGN_OBJ
372-
|| opline->opcode == ZEND_ASSIGN_DIM)
372+
|| opline->opcode == ZEND_ASSIGN_DIM
373+
|| opline->opcode == ZEND_ASSIGN_OBJ_OP
374+
|| opline->opcode == ZEND_ASSIGN_DIM_OP)
373375
&& opline->op1_type == IS_CV
374376
&& opline->op1.var == cv_var
375377
&& zend_may_throw(opline, &ssa->ops[ssa->vars[src_var].definition], op_array, ssa)) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
--TEST--
2+
ASSIGN_OBJ_OP 001: Incorrect optimization of ASSIGN_OBJ_OP may lead to memory leak
3+
--INI--
4+
opcache.enable=1
5+
opcache.enable_cli=1
6+
opcache.optimization_level=-1
7+
--FILE--
8+
<?php
9+
function s() {
10+
$a .= $a += $y;
11+
$a = $a->y *= '';
12+
}
13+
s();
14+
?>
15+
--EXPECTF--
16+
Warning: Undefined variable $y in %sassign_obj_op_001.php on line 3
17+
18+
Warning: Undefined variable $a in %sassign_obj_op_001.php on line 3
19+
20+
Fatal error: Uncaught Error: Attempt to assign property "y" on string in %sassign_obj_op_001.php:4
21+
Stack trace:
22+
#0 %sassign_obj_op_001.php(6): s()
23+
#1 {main}
24+
thrown in %sassign_obj_op_001.php on line 4

0 commit comments

Comments
 (0)