We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
1 parent b0bac33 commit abe3673Copy full SHA for abe3673
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
@@ -1696,7 +1696,7 @@ static void zend_gc_root_tmpvars(void) {
1696
}
1697
1698
uint32_t kind = range->var & ZEND_LIVE_MASK;
1699
- if (kind == ZEND_LIVE_TMPVAR) {
+ if (kind == ZEND_LIVE_TMPVAR || kind == ZEND_LIVE_LOOP) {
1700
uint32_t var_num = range->var & ~ZEND_LIVE_MASK;
1701
zval *var = ZEND_CALL_VAR(ex, var_num);
1702
if (Z_REFCOUNTED_P(var)) {
0 commit comments