1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- --TEST--
- Bug #31185 (Crash when exceptions thrown from ArrayAccess::offsetUnset())
- --FILE--
- <?php
- class FooBar implements ArrayAccess {
- private $array = array();
- public function offsetExists($index): bool {
- return isset($this->array[$index]);
- }
- public function offsetGet($index): mixed {
- return $this->array[$index];
- }
- public function offsetSet($index, $value): void {
- echo __METHOD__ . "($index, $value)\n";
- $this->array[$index] = $value;
- }
- public function offsetUnset($index): void {
- 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);
- ?>
- --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
- )
- )
|