mirror of
https://github.com/php/php-src.git
synced 2024-12-18 14:30:35 +08:00
44 lines
730 B
PHP
44 lines
730 B
PHP
--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!
|