diff options
| author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 2013-03-14 05:42:27 +0000 |
|---|---|---|
| committer | <> | 2013-04-03 16:25:08 +0000 |
| commit | c4dd7a1a684490673e25aaf4fabec5df138854c4 (patch) | |
| tree | 4d57c44caae4480efff02b90b9be86f44bf25409 /ext/spl/tests/bug31185.phpt | |
| download | php2-master.tar.gz | |
Imported from /home/lorry/working-area/delta_php2/php-5.4.13.tar.bz2.HEADphp-5.4.13master
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=== |
