Skip to content

Commit 11d1396

Browse files
committed
Merge branch 'PHP-7.4'
2 parents c10cd73 + 9659562 commit 11d1396

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

Zend/tests/assign_coalesce_006.phpt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
--TEST--
2+
Null coalesce assign with memoized constant operand that is later interned (OSS-Fuzz #17903)
3+
--FILE--
4+
<?php
5+
$foo[__DIR__] ??= 42;
6+
var_dump($foo);
7+
?>
8+
--EXPECTF--
9+
array(1) {
10+
["%s"]=>
11+
int(42)
12+
}

Zend/zend_compile.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2100,6 +2100,9 @@ static void zend_compile_memoized_expr(znode *result, zend_ast *expr) /* {{{ */
21002100
} else if (result->op_type == IS_TMP_VAR) {
21012101
zend_emit_op_tmp(&memoized_result, ZEND_COPY_TMP, result, NULL);
21022102
} else {
2103+
if (result->op_type == IS_CONST) {
2104+
Z_TRY_ADDREF(result->u.constant);
2105+
}
21032106
memoized_result = *result;
21042107
}
21052108

@@ -7433,7 +7436,11 @@ void zend_compile_coalesce(znode *result, zend_ast *ast) /* {{{ */
74337436
/* }}} */
74347437

74357438
static void znode_dtor(zval *zv) {
7436-
efree(Z_PTR_P(zv));
7439+
znode *node = Z_PTR_P(zv);
7440+
if (node->op_type == IS_CONST) {
7441+
zval_ptr_dtor_nogc(&node->u.constant);
7442+
}
7443+
efree(node);
74377444
}
74387445

74397446
void zend_compile_assign_coalesce(znode *result, zend_ast *ast) /* {{{ */

0 commit comments

Comments
 (0)