diff options
Diffstat (limited to 'ext/spl/tests/bug31185.phpt')
| -rw-r--r-- | ext/spl/tests/bug31185.phpt | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/ext/spl/tests/bug31185.phpt b/ext/spl/tests/bug31185.phpt new file mode 100644 index 0000000..aa410eb --- /dev/null +++ b/ext/spl/tests/bug31185.phpt @@ -0,0 +1,61 @@ +--TEST-- +Bug #31185 (Crash when exceptions thrown from ArrayAccess::offsetUnset()) +--FILE-- +<?php + +class FooBar implements ArrayAccess { + private $array = array(); + + public function offsetExists($index) { + return isset($this->array[$index]); + } + + public function offsetGet($index) { + return $this->array[$index]; + } + + public function offsetSet($index, $value) { + echo __METHOD__ . "($index, $value)\n"; + $this->array[$index] = $value; + } + + public function offsetUnset($index) { + throw new Exception('FAIL'); + unset($this->array[$index]); + } + +} + +$i = 0; $j = 0; +$foo = new FooBar(); +$foo[$j++] = $i++; +$foo[$j++] = $i++; +$foo[$j++] = $i++; +try +{ + unset($foo[1]); +} +catch (Exception $e) +{ + echo "CAUGHT: " . $e->getMessage() . "\n"; +} + +print_R($foo); +?> +===DONE=== +--EXPECT-- +FooBar::offsetSet(0, 0) +FooBar::offsetSet(1, 1) +FooBar::offsetSet(2, 2) +CAUGHT: FAIL +FooBar Object +( + [array:FooBar:private] => Array + ( + [0] => 0 + [1] => 1 + [2] => 2 + ) + +) +===DONE=== |
