summaryrefslogtreecommitdiff
path: root/ext/spl
diff options
context:
space:
mode:
authorXinchen Hui <laruence@php.net>2012-07-21 22:45:16 +0800
committerXinchen Hui <laruence@php.net>2012-07-21 22:45:16 +0800
commit0c996613c0173708381f4bfcd28d2441360bc701 (patch)
tree691dd14ff7151f81aee569e51e4ee3e186e0ed6d /ext/spl
parenta6f1533789b897d3b8930b437164e81e0a0f4c72 (diff)
downloadphp-git-0c996613c0173708381f4bfcd28d2441360bc701.tar.gz
Fixed bug #62616 (ArrayIterator::count() from IteratorIterator instance gives Segmentation fault)
Diffstat (limited to 'ext/spl')
-rwxr-xr-xext/spl/spl_iterators.c2
-rw-r--r--ext/spl/tests/bug62616.phpt15
2 files changed, 17 insertions, 0 deletions
diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c
index 19a68f6372..e5dc030730 100755
--- a/ext/spl/spl_iterators.c
+++ b/ext/spl/spl_iterators.c
@@ -1289,6 +1289,8 @@ static union _zend_function *spl_dual_it_get_method(zval **object_ptr, char *met
*object_ptr = intern->inner.zobject;
function_handler = Z_OBJ_HT_P(*object_ptr)->get_method(object_ptr, method, method_len, key TSRMLS_CC);
}
+ } else {
+ *object_ptr = intern->inner.zobject;
}
}
return function_handler;
diff --git a/ext/spl/tests/bug62616.phpt b/ext/spl/tests/bug62616.phpt
new file mode 100644
index 0000000000..4e4be94491
--- /dev/null
+++ b/ext/spl/tests/bug62616.phpt
@@ -0,0 +1,15 @@
+--TEST--
+Bug #62616 (ArrayIterator::count() from IteratorIterator instance gives Segmentation fault)
+--FILE--
+<?php
+$ai = new ArrayIterator(array(0,1));
+
+var_dump($ai->count());
+
+$ii = new IteratorIterator($ai);
+
+var_dump($ii->count());
+?>
+--EXPECTF--
+int(2)
+int(2)