Skip to content

Commit 36cb48c

Browse files
committed
Merge branch 'PHP-8.0'
* PHP-8.0: Fix leak on foreach by ref assign to property
2 parents 58ca47a + 2efee44 commit 36cb48c

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
@@ -3323,17 +3323,13 @@ void zend_compile_assign_ref(znode *result, zend_ast *ast) /* {{{ */
33233323
opline->extended_value &= ~ZEND_FETCH_REF;
33243324
opline->extended_value |= flags;
33253325
zend_emit_op_data(&source_node);
3326-
if (result != NULL) {
3327-
*result = target_node;
3328-
}
3326+
*result = target_node;
33293327
} else if (opline && opline->opcode == ZEND_FETCH_STATIC_PROP_W) {
33303328
opline->opcode = ZEND_ASSIGN_STATIC_PROP_REF;
33313329
opline->extended_value &= ~ZEND_FETCH_REF;
33323330
opline->extended_value |= flags;
33333331
zend_emit_op_data(&source_node);
3334-
if (result != NULL) {
3335-
*result = target_node;
3336-
}
3332+
*result = target_node;
33373333
} else {
33383334
opline = zend_emit_op(result, ZEND_ASSIGN_REF, &target_node, &source_node);
33393335
opline->extended_value = flags;
@@ -3343,9 +3339,11 @@ void zend_compile_assign_ref(znode *result, zend_ast *ast) /* {{{ */
33433339

33443340
static inline void zend_emit_assign_ref_znode(zend_ast *var_ast, znode *value_node) /* {{{ */
33453341
{
3342+
znode dummy_node;
33463343
zend_ast *assign_ast = zend_ast_create(ZEND_AST_ASSIGN_REF, var_ast,
33473344
zend_ast_create_znode(value_node));
3348-
zend_compile_expr(NULL, assign_ast);
3345+
zend_compile_expr(&dummy_node, assign_ast);
3346+
zend_do_free(&dummy_node);
33493347
}
33503348
/* }}} */
33513349

0 commit comments

Comments
 (0)