Skip to content

Commit 2efee44

Browse files
committed
Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4: Fix leak on foreach by ref assign to property
2 parents 5b0a469 + 36f5d71 commit 2efee44

File tree

2 files changed

+16
-7
lines changed

2 files changed

+16
-7
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
--TEST--
2+
Foreach by ref assignment to property
3+
--FILE--
4+
<?php
5+
$obj = new stdClass;
6+
foreach ([0] as &$obj->prop) {
7+
var_dump($obj->prop);
8+
}
9+
?>
10+
--EXPECT--
11+
int(0)

Zend/zend_compile.c

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3213,17 +3213,13 @@ void zend_compile_assign_ref(znode *result, zend_ast *ast) /* {{{ */
32133213
opline->extended_value &= ~ZEND_FETCH_REF;
32143214
opline->extended_value |= flags;
32153215
zend_emit_op_data(&source_node);
3216-
if (result != NULL) {
3217-
*result = target_node;
3218-
}
3216+
*result = target_node;
32193217
} else if (opline && opline->opcode == ZEND_FETCH_STATIC_PROP_W) {
32203218
opline->opcode = ZEND_ASSIGN_STATIC_PROP_REF;
32213219
opline->extended_value &= ~ZEND_FETCH_REF;
32223220
opline->extended_value |= flags;
32233221
zend_emit_op_data(&source_node);
3224-
if (result != NULL) {
3225-
*result = target_node;
3226-
}
3222+
*result = target_node;
32273223
} else {
32283224
opline = zend_emit_op(result, ZEND_ASSIGN_REF, &target_node, &source_node);
32293225
opline->extended_value = flags;
@@ -3233,9 +3229,11 @@ void zend_compile_assign_ref(znode *result, zend_ast *ast) /* {{{ */
32333229

32343230
static inline void zend_emit_assign_ref_znode(zend_ast *var_ast, znode *value_node) /* {{{ */
32353231
{
3232+
znode dummy_node;
32363233
zend_ast *assign_ast = zend_ast_create(ZEND_AST_ASSIGN_REF, var_ast,
32373234
zend_ast_create_znode(value_node));
3238-
zend_compile_expr(NULL, assign_ast);
3235+
zend_compile_expr(&dummy_node, assign_ast);
3236+
zend_do_free(&dummy_node);
32393237
}
32403238
/* }}} */
32413239

0 commit comments

Comments
 (0)