Skip to content

Commit d64e0ff

Browse files
committed
Merge branch 'PHP-8.4' into PHP-8.5
* PHP-8.4: Fix GH-20085: Assertion failure when combining lazy object get_properties exception with foreach loop
2 parents 53b0a95 + 27035eb commit d64e0ff

File tree

3 files changed

+29
-2
lines changed

3 files changed

+29
-2
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
--TEST--
2+
GH-20085 (Assertion failure when combining lazy object get_properties exception with foreach loop)
3+
--FILE--
4+
<?php
5+
class C {
6+
public int $a;
7+
public function __construct() {
8+
$this->a = 1;
9+
}
10+
}
11+
$obj = new C;
12+
$reflector = new ReflectionClass(C::class);
13+
foreach ($obj as &$value) {
14+
$obj = $reflector->newLazyGhost(function ($obj) {
15+
throw new Error;
16+
});
17+
}
18+
echo !obj;
19+
?>
20+
--EXPECTF--
21+
Fatal error: Uncaught Error in %s:%d
22+
Stack trace:
23+
#0 %s(%d): {closure:%s:%d}(Object(C))
24+
#1 {main}
25+
thrown in %s on line %d

Zend/zend_vm_def.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7307,7 +7307,7 @@ ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
73077307
while (1) {
73087308
if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
73097309
/* reached end of iteration */
7310-
ZEND_VM_C_GOTO(fe_fetch_w_exit);
7310+
ZEND_VM_C_GOTO(fe_fetch_w_exit_exc);
73117311
}
73127312
pos++;
73137313
value = &p->val;
@@ -7403,6 +7403,7 @@ ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
74037403
}
74047404
} else {
74057405
zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array));
7406+
ZEND_VM_C_LABEL(fe_fetch_w_exit_exc):
74067407
if (UNEXPECTED(EG(exception))) {
74077408
UNDEF_RESULT();
74087409
HANDLE_EXCEPTION();

Zend/zend_vm_execute.h

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)