Skip to content

Commit ddeda32

Browse files
committed
Merge branch 'PHP-8.5'
* PHP-8.5: Fix missing addref for __unset
2 parents d648cc1 + be9f26d commit ddeda32

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

Zend/tests/gh21603.phpt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
--TEST--
2+
GH-21603: Missing addref for __unset
3+
--CREDITS--
4+
cnwangjihe
5+
--FILE--
6+
<?php
7+
8+
class C {
9+
public function __unset($name) {
10+
global $c;
11+
$c = null;
12+
var_dump($this);
13+
}
14+
}
15+
16+
$c = new C;
17+
unset($c->prop);
18+
19+
?>
20+
--EXPECTF--
21+
object(C)#%d (0) {
22+
}

Zend/zend_object_handlers.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1660,9 +1660,11 @@ ZEND_API void zend_std_unset_property(zend_object *zobj, zend_string *name, void
16601660
}
16611661
if (!((*guard) & IN_UNSET)) {
16621662
/* have unsetter - try with it! */
1663+
GC_ADDREF(zobj);
16631664
(*guard) |= IN_UNSET; /* prevent circular unsetting */
16641665
zend_std_call_unsetter(zobj, name);
16651666
(*guard) &= ~IN_UNSET;
1667+
OBJ_RELEASE(zobj);
16661668
return;
16671669
} else if (UNEXPECTED(IS_WRONG_PROPERTY_OFFSET(property_offset))) {
16681670
/* Trigger the correct error */

0 commit comments

Comments
 (0)