diff options
| author | Marcus Boerger <helly@php.net> | 2007-10-18 04:49:55 +0000 |
|---|---|---|
| committer | Marcus Boerger <helly@php.net> | 2007-10-18 04:49:55 +0000 |
| commit | 017fa36d3f44461b980b8e36fdf80fd3c0b289b1 (patch) | |
| tree | 861664b6ed440bfd36372090247352382afab29c | |
| parent | c43fe1c6cf0a4b7904954254eb4219e887771641 (diff) | |
| download | php-git-017fa36d3f44461b980b8e36fdf80fd3c0b289b1.tar.gz | |
- MFB #42654, #42704
| -rwxr-xr-x | ext/spl/tests/bug42654.phpt | 158 | ||||
| -rwxr-xr-x | ext/spl/tests/bug42703.phpt | 41 |
2 files changed, 199 insertions, 0 deletions
diff --git a/ext/spl/tests/bug42654.phpt b/ext/spl/tests/bug42654.phpt new file mode 100755 index 0000000000..20aad74b73 --- /dev/null +++ b/ext/spl/tests/bug42654.phpt @@ -0,0 +1,158 @@ +--TEST-- +Bug #42654 (RecursiveIteratorIterator modifies only part of leaves) +--FILE-- +<?php +$data = array(1 => 'val1', + array(2 => 'val2', + array(3 => 'val3'), + ), + 4 => 'val4' + ); + +$iterator = new RecursiveIteratorIterator(new +RecursiveArrayIterator($data)); +foreach($iterator as $foo) { + $key = $iterator->key(); + echo "update $key\n"; + var_dump($iterator->getInnerIterator()); + $iterator->offsetSet($key, 'alter'); + var_dump($iterator->getInnerIterator()); +} +$copy = $iterator->getArrayCopy(); +var_dump($copy); +?> +--EXPECTF-- +update 1 +object(RecursiveArrayIterator)#%d (1) { + ["storage":"ArrayIterator":private]=> + array(3) { + [1]=> + string(4) "val1" + [2]=> + array(2) { + [2]=> + string(4) "val2" + [3]=> + array(1) { + [3]=> + string(4) "val3" + } + } + [4]=> + string(4) "val4" + } +} +object(RecursiveArrayIterator)#%d (1) { + ["storage":"ArrayIterator":private]=> + array(3) { + [1]=> + string(5) "alter" + [2]=> + array(2) { + [2]=> + string(4) "val2" + [3]=> + array(1) { + [3]=> + string(4) "val3" + } + } + [4]=> + string(4) "val4" + } +} +update 2 +object(RecursiveArrayIterator)#%d (1) { + ["storage":"ArrayIterator":private]=> + array(2) { + [2]=> + string(4) "val2" + [3]=> + array(1) { + [3]=> + string(4) "val3" + } + } +} +object(RecursiveArrayIterator)#%d (1) { + ["storage":"ArrayIterator":private]=> + array(2) { + [2]=> + string(5) "alter" + [3]=> + array(1) { + [3]=> + string(4) "val3" + } + } +} +update 3 +object(RecursiveArrayIterator)#%d (1) { + ["storage":"ArrayIterator":private]=> + array(1) { + [3]=> + string(4) "val3" + } +} +object(RecursiveArrayIterator)#%d (1) { + ["storage":"ArrayIterator":private]=> + array(1) { + [3]=> + string(5) "alter" + } +} +update 4 +object(RecursiveArrayIterator)#%d (1) { + ["storage":"ArrayIterator":private]=> + array(3) { + [1]=> + string(5) "alter" + [2]=> + array(2) { + [2]=> + string(4) "val2" + [3]=> + array(1) { + [3]=> + string(4) "val3" + } + } + [4]=> + string(4) "val4" + } +} +object(RecursiveArrayIterator)#%d (1) { + ["storage":"ArrayIterator":private]=> + array(3) { + [1]=> + string(5) "alter" + [2]=> + array(2) { + [2]=> + string(4) "val2" + [3]=> + array(1) { + [3]=> + string(4) "val3" + } + } + [4]=> + string(5) "alter" + } +} +array(3) { + [1]=> + string(5) "alter" + [2]=> + array(2) { + [2]=> + string(4) "val2" + [3]=> + array(1) { + [3]=> + string(4) "val3" + } + } + [4]=> + string(5) "alter" +} diff --git a/ext/spl/tests/bug42703.phpt b/ext/spl/tests/bug42703.phpt new file mode 100755 index 0000000000..5c52763cd6 --- /dev/null +++ b/ext/spl/tests/bug42703.phpt @@ -0,0 +1,41 @@ +--TEST-- +Bug #42703 (Exception raised in an iterator::current() causes segfault in FilterIterator) +--FILE-- +<?php +class BlaIterator implements Iterator +{ + public function rewind() { } + + public function next() { } + + public function valid() { + return true; + } + + public function current() + { + throw new Exception('boo'); + } + + public function key() { } +} + +$it = new BlaIterator(); +$itit = new IteratorIterator($it); + +try { + foreach($itit as $key => $value) { + echo $key, $value; + } +} +catch (Exception $e) { + var_dump($e->getMessage()); +} + +var_dump($itit->current()); +var_dump($itit->key()); +?> +--EXPECTF-- +string(3) "boo" +NULL +NULL |
