diff options
| -rw-r--r-- | Zend/tests/foreach_reference.phpt | 50 | ||||
| -rw-r--r-- | Zend/zend_variables.c | 2 |
2 files changed, 51 insertions, 1 deletions
diff --git a/Zend/tests/foreach_reference.phpt b/Zend/tests/foreach_reference.phpt new file mode 100644 index 0000000000..6b273208aa --- /dev/null +++ b/Zend/tests/foreach_reference.phpt @@ -0,0 +1,50 @@ +--TEST-- +foreach with reference +--FILE-- +<?php + +$array = ['a', 'b', 'c', 'd']; + +foreach ($array as &$a) { +} + +var_dump($array); + +var_dump(array_values($array)); +var_dump($a); + +var_dump(array_reverse($array)); + +?> +--EXPECTF-- +array(4) { + [0]=> + string(1) "a" + [1]=> + string(1) "b" + [2]=> + string(1) "c" + [3]=> + &string(1) "d" +} +array(4) { + [0]=> + string(1) "a" + [1]=> + string(1) "b" + [2]=> + string(1) "c" + [3]=> + &string(1) "d" +} +string(1) "d" +array(4) { + [0]=> + &string(1) "d" + [1]=> + string(1) "c" + [2]=> + string(1) "b" + [3]=> + string(1) "a" +} diff --git a/Zend/zend_variables.c b/Zend/zend_variables.c index b476bd9f8d..91d68c3985 100644 --- a/Zend/zend_variables.c +++ b/Zend/zend_variables.c @@ -207,7 +207,7 @@ ZEND_API void zval_add_ref(zval *p) if (Z_ISREF_P(p) && Z_REFCOUNT_P(p) == 1) { zend_reference *ref = Z_REF_P(p); ZVAL_COPY(p, Z_REFVAL_P(p)); - efree(ref); + efree_size(ref, sizeof(zend_reference)); } else { Z_ADDREF_P(p); } |
