]> granicus.if.org Git - php/commitdiff
- MFB #42654, #42704
authorMarcus Boerger <helly@php.net>
Thu, 18 Oct 2007 04:49:55 +0000 (04:49 +0000)
committerMarcus Boerger <helly@php.net>
Thu, 18 Oct 2007 04:49:55 +0000 (04:49 +0000)
ext/spl/tests/bug42654.phpt [new file with mode: 0755]
ext/spl/tests/bug42703.phpt [new file with mode: 0755]

diff --git a/ext/spl/tests/bug42654.phpt b/ext/spl/tests/bug42654.phpt
new file mode 100755 (executable)
index 0000000..20aad74
--- /dev/null
@@ -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 (executable)
index 0000000..5c52763
--- /dev/null
@@ -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