12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- --TEST--
- Bug #69212: Leaking VIA_HANDLER func when exception thrown in __call/... arg passing
- --FILE--
- <?php
- class Test {
- public static function __callStatic($method, $args) {}
- public function __call($method, $args) {}
- }
- function do_throw() { throw new Exception; }
- try {
- Test::foo(do_throw());
- } catch (Exception $e) {
- echo "Caught!\n";
- }
- try {
- (new Test)->bar(do_throw());
- } catch (Exception $e) {
- echo "Caught!\n";
- }
- try {
- $f = function () {};
- $f->__invoke(do_throw());
- } catch (Exception $e) {
- echo "Caught!\n";
- }
- try {
- $t = new Test;
- $f->__invoke($t->bar(Test::foo(do_throw())));
- } catch (Exception $e) {
- echo "Caught!\n";
- }
- ?>
- --EXPECT--
- Caught!
- Caught!
- Caught!
- Caught!
|