bug45805.phpt 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. --TEST--
  2. Bug #45805 (Crash on throwing exception from error handler)
  3. --SKIPIF--
  4. <?php extension_loaded('reflection') or die('skip'); ?>
  5. --FILE--
  6. <?php
  7. class PHPUnit_Util_ErrorHandler
  8. {
  9. public static function handleError($errno, $errstr, $errfile, $errline)
  10. {
  11. throw new RuntimeException;
  12. }
  13. }
  14. class A {
  15. public function getX() {
  16. return NULL;
  17. }
  18. }
  19. class B {
  20. public function foo() {
  21. $obj = new A;
  22. $source = &$obj->getX();
  23. }
  24. public function bar() {
  25. $m = new ReflectionMethod('B', 'foo');
  26. $m->invoke($this);
  27. }
  28. }
  29. set_error_handler(
  30. array('PHPUnit_Util_ErrorHandler', 'handleError'), E_ALL | E_STRICT
  31. );
  32. $o = new B;
  33. $o->bar();
  34. ?>
  35. --EXPECTF--
  36. Fatal error: Uncaught exception 'RuntimeException' in %sbug45805.php:%d
  37. Stack trace:
  38. #0 %sbug45805.php(%d): PHPUnit_Util_ErrorHandler::handleError(2048, 'Only variables ...', '%s', %d, Array)
  39. #1 [internal function]: B->foo()
  40. #2 %sbug45805.php(%d): ReflectionMethod->invoke(Object(B))
  41. #3 %sbug45805.php(%d): B->bar()
  42. #4 {main}
  43. thrown in %sbug45805.php on line %d