bug69212.phpt 730 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. --TEST--
  2. Bug #69212: Leaking VIA_HANDLER func when exception thrown in __call/... arg passing
  3. --FILE--
  4. <?php
  5. class Test {
  6. public static function __callStatic($method, $args) {}
  7. public function __call($method, $args) {}
  8. }
  9. function do_throw() { throw new Exception; }
  10. try {
  11. Test::foo(do_throw());
  12. } catch (Exception $e) {
  13. echo "Caught!\n";
  14. }
  15. try {
  16. (new Test)->bar(do_throw());
  17. } catch (Exception $e) {
  18. echo "Caught!\n";
  19. }
  20. try {
  21. $f = function () {};
  22. $f->__invoke(do_throw());
  23. } catch (Exception $e) {
  24. echo "Caught!\n";
  25. }
  26. try {
  27. $t = new Test;
  28. $f->__invoke($t->bar(Test::foo(do_throw())));
  29. } catch (Exception $e) {
  30. echo "Caught!\n";
  31. }
  32. ?>
  33. --EXPECT--
  34. Caught!
  35. Caught!
  36. Caught!
  37. Caught!