diff --git a/Zend/tests/gc_047.phpt b/Zend/tests/gc_047.phpt new file mode 100644 index 0000000000000..08403d1e99bc9 --- /dev/null +++ b/Zend/tests/gc_047.phpt @@ -0,0 +1,20 @@ +--TEST-- +GC 047: Leak after GC inside a foreach loop +--INI-- +zend.enable_gc=1 +--FILE-- + +--EXPECT-- +int(2) diff --git a/Zend/zend_gc.c b/Zend/zend_gc.c index f062747eaeb63..c9034ba5e34c6 100644 --- a/Zend/zend_gc.c +++ b/Zend/zend_gc.c @@ -1696,7 +1696,7 @@ static void zend_gc_root_tmpvars(void) { } uint32_t kind = range->var & ZEND_LIVE_MASK; - if (kind == ZEND_LIVE_TMPVAR) { + if (kind == ZEND_LIVE_TMPVAR || kind == ZEND_LIVE_LOOP) { uint32_t var_num = range->var & ~ZEND_LIVE_MASK; zval *var = ZEND_CALL_VAR(ex, var_num); if (Z_REFCOUNTED_P(var)) {