Skip to content

Commit df0e151

Browse files
committed
Fix missing deref in zend_fe_fetch_object_helper
Fixes OSS-Fuzz #481017027 Introduced in GH-20628
1 parent cb51737 commit df0e151

File tree

3 files changed

+35
-0
lines changed

3 files changed

+35
-0
lines changed

Zend/tests/oss-fuzz-481017027.phpt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
--TEST--
2+
OSS-Fuzz #481017027: Missing zend_fe_fetch_object_helper deref
3+
--FILE--
4+
<?php
5+
6+
class C {
7+
public $y;
8+
}
9+
10+
function test($obj, $name) {
11+
foreach ($obj as $$name) {
12+
var_dump($$name);
13+
}
14+
}
15+
16+
$y = 42;
17+
$obj = new C;
18+
$obj->y = &$y;
19+
test($obj, '');
20+
21+
?>
22+
--EXPECT--
23+
int(42)

Zend/zend_vm_def.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7183,6 +7183,10 @@ ZEND_VM_C_LABEL(fe_fetch_r_exit):
71837183
zval *variable_ptr = EX_VAR(opline->op2.var);
71847184
zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
71857185
} else {
7186+
if (UNEXPECTED(Z_ISREF_P(value))) {
7187+
value = Z_REFVAL_P(value);
7188+
value_type = Z_TYPE_INFO_P(value);
7189+
}
71867190
zval *res = EX_VAR(opline->op2.var);
71877191
zend_refcounted *gc = Z_COUNTED_P(value);
71887192

Zend/zend_vm_execute.h

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)