summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@php.net>2008-01-29 10:45:19 +0000
committerDmitry Stogov <dmitry@php.net>2008-01-29 10:45:19 +0000
commit5d1e742056b44754ae32441ce66d79995baebd18 (patch)
tree09dd9fe95cd63602d64c18ead2c2247a3d8ca0ae
parenta2b707fcd7cb207c49243a791c254dcdd2465b49 (diff)
downloadphp-git-5d1e742056b44754ae32441ce66d79995baebd18.tar.gz
Fixed bug #43505 (Assign by reference bug)
-rw-r--r--ext/standard/array.c2
-rw-r--r--ext/standard/tests/array/bug43505.phpt43
2 files changed, 44 insertions, 1 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c
index 390012c107..bf472e10a2 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -324,7 +324,7 @@ PHP_FUNCTION(count)
if (Z_OBJ_HT_P(array)->get_class_entry && instanceof_function(Z_OBJCE_P(array), spl_ce_Countable TSRMLS_CC)) {
zend_call_method_with_0_params(&array, NULL, NULL, "count", &retval);
if (retval) {
- convert_to_long(retval);
+ convert_to_long_ex(&retval);
RETVAL_LONG(Z_LVAL_P(retval));
zval_ptr_dtor(&retval);
}
diff --git a/ext/standard/tests/array/bug43505.phpt b/ext/standard/tests/array/bug43505.phpt
new file mode 100644
index 0000000000..72d26b6ea4
--- /dev/null
+++ b/ext/standard/tests/array/bug43505.phpt
@@ -0,0 +1,43 @@
+--TEST--
+Bug #43505 (Assign by reference bug)
+--INI--
+error_reporting=0
+--FILE--
+<?php
+class Test implements Countable {
+ public function count() {
+ return $some;
+ }
+}
+
+$obj = new Test();
+
+$a = array();
+$b =& $a['test'];
+var_dump($a);
+
+$t = count($obj);
+
+$a = array();
+$b =& $a['test'];
+var_dump($a);
+?>
+--EXPECT--
+array(1) {
+ ["test"]=>
+ &NULL
+}
+array(1) {
+ ["test"]=>
+ &NULL
+}
+--UEXPECT--
+array(1) {
+ [u"test"]=>
+ &NULL
+}
+array(1) {
+ [u"test"]=>
+ &NULL
+}
+