We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
2 parents 1707a53 + abe3673 commit d906d8bCopy full SHA for d906d8b
Zend/tests/gc_047.phpt
@@ -0,0 +1,20 @@
1
+--TEST--
2
+GC 047: Leak after GC inside a foreach loop
3
+--INI--
4
+zend.enable_gc=1
5
+--FILE--
6
+<?php
7
+$a = [0, 1];
8
+foreach($a as &$v) {
9
+ $a[0] =& $a;
10
+ $a[1] = array();
11
+ $a[1][0] =& $a[1];
12
+ $b = 1;
13
+ $a =& $b;
14
+ gc_collect_cycles();
15
+ break;
16
+}
17
+var_dump(gc_collect_cycles());
18
+?>
19
+--EXPECT--
20
+int(2)
Zend/zend_gc.c
@@ -1726,7 +1726,7 @@ static void zend_gc_root_tmpvars(void) {
1726
}
1727
1728
uint32_t kind = range->var & ZEND_LIVE_MASK;
1729
- if (kind == ZEND_LIVE_TMPVAR) {
+ if (kind == ZEND_LIVE_TMPVAR || kind == ZEND_LIVE_LOOP) {
1730
uint32_t var_num = range->var & ~ZEND_LIVE_MASK;
1731
zval *var = ZEND_CALL_VAR(ex, var_num);
1732
if (Z_REFCOUNTED_P(var)) {
0 commit comments