summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXinchen Hui <laruence@php.net>2015-01-05 22:20:13 +0800
committerXinchen Hui <laruence@php.net>2015-01-05 22:21:37 +0800
commitfaa41715071966de6d0b56977eaf4c51831c00ee (patch)
treef501f8866270e6ec075dbebf29f5789f13232f03
parent40230eef81c7331468324cebe7b39cdbff7d470c (diff)
downloadphp-git-faa41715071966de6d0b56977eaf4c51831c00ee.tar.gz
Add test script and use efree_size
-rw-r--r--Zend/tests/foreach_reference.phpt50
-rw-r--r--Zend/zend_variables.c2
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);
}