1
0
mirror of https://github.com/php/php-src.git synced 2026-03-30 04:02:19 +02:00
Files
archived-php-src/ext/spl/tests/bug73423.phpt
Nikita Popov 4b9ebd837b Allow throwing exception while loading parent class
This is a fix for symfony/symfony#32995.

The behavior is:

* Throwing exception when loading parent/interface is allowed
  (and we will also throw one if the class is simply not found).
* If this happens, the bucket key for the class is reset, so
  it's possibly to try registering the same class again.
* However, if the class has already been used due to a variance
  obligation, the exception is upgraded to a fatal error, as we
  cannot safely unregister the class stub anymore.
2019-09-12 16:41:18 +02:00

83 lines
1.4 KiB
PHP

--TEST--
Bug #73423 (Reproducible crash with GDB backtrace)
--FILE--
<?php
class foo implements \RecursiveIterator
{
public $foo = [];
public Function current ()
{
return current ($this->foo);
}
public Function key ()
{
return key ($this->foo);
}
public Function next ()
{
next ($this->foo);
}
public Function rewind ()
{
reset ($this->foo);
}
public Function valid ()
{
return current ($this->foo) !== false;
}
public Function getChildren ()
{
return current ($this->foo);
}
public Function hasChildren ()
{
return (bool) count ($this->foo);
}
}
class fooIterator extends \RecursiveFilterIterator
{
public Function __destruct ()
{
eval("class A extends NotExists {}");
/* CRASH */
}
public Function accept ()
{
return true;
}
}
$foo = new foo ();
$foo->foo[] = new foo ();
foreach (new \RecursiveIteratorIterator (new fooIterator ($foo)) as $bar) ;
?>
--EXPECTF--
Fatal error: Uncaught Error: Class 'NotExists' not found in %s:%d
Stack trace:
#0 %s(%d): eval()
#1 %s(%d): fooIterator->__destruct()
#2 {main}
Next Error: Class 'NotExists' not found in %s:%d
Stack trace:
#0 %s(%d): eval()
#1 %s(%d): fooIterator->__destruct()
#2 {main}
thrown in %s on line %d