mirror of
https://github.com/php/php-src.git
synced 2024-12-24 01:09:58 +08:00
- Fixed bug #50383 (Exceptions thrown in __call / __callStatic do not include file and line in trace)
This commit is contained in:
parent
57200ba020
commit
b674aa702a
130
Zend/tests/bug50383.phpt
Normal file
130
Zend/tests/bug50383.phpt
Normal file
@ -0,0 +1,130 @@
|
||||
--TEST--
|
||||
Bug #50383 (Exceptions thrown in __call / __callStatic do not include file and line in trace)
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
class myClass {
|
||||
public static function __callStatic($method, $args) {
|
||||
throw new Exception("Missing static method '$method'\n");
|
||||
}
|
||||
public function __call($method, $args) {
|
||||
throw new Exception("Missing method '$method'\n");
|
||||
}
|
||||
}
|
||||
|
||||
function thrower() {
|
||||
myClass::ThrowException();
|
||||
}
|
||||
function thrower2() {
|
||||
$x = new myClass;
|
||||
$x->foo();
|
||||
}
|
||||
|
||||
try {
|
||||
thrower();
|
||||
} catch(Exception $e) {
|
||||
print $e->getMessage();
|
||||
print_r($e->getTrace());
|
||||
}
|
||||
|
||||
try {
|
||||
thrower2();
|
||||
} catch (Exception $e) {
|
||||
print $e->getMessage();
|
||||
print_r($e->getTrace());
|
||||
}
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
Missing static method 'ThrowException'
|
||||
Array
|
||||
(
|
||||
[0] => Array
|
||||
(
|
||||
[file] => %s
|
||||
[line] => 13
|
||||
[function] => __callStatic
|
||||
[class] => myClass
|
||||
[type] => ::
|
||||
[args] => Array
|
||||
(
|
||||
[0] => ThrowException
|
||||
[1] => Array
|
||||
(
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
[1] => Array
|
||||
(
|
||||
[file] => %s
|
||||
[line] => 13
|
||||
[function] => ThrowException
|
||||
[class] => myClass
|
||||
[type] => ::
|
||||
[args] => Array
|
||||
(
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
[2] => Array
|
||||
(
|
||||
[file] => %s
|
||||
[line] => 21
|
||||
[function] => thrower
|
||||
[args] => Array
|
||||
(
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
)
|
||||
Missing method 'foo'
|
||||
Array
|
||||
(
|
||||
[0] => Array
|
||||
(
|
||||
[file] => %s
|
||||
[line] => 17
|
||||
[function] => __call
|
||||
[class] => myClass
|
||||
[type] => ->
|
||||
[args] => Array
|
||||
(
|
||||
[0] => foo
|
||||
[1] => Array
|
||||
(
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
[1] => Array
|
||||
(
|
||||
[file] => %s
|
||||
[line] => 17
|
||||
[function] => foo
|
||||
[class] => myClass
|
||||
[type] => ->
|
||||
[args] => Array
|
||||
(
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
[2] => Array
|
||||
(
|
||||
[file] => %s
|
||||
[line] => 28
|
||||
[function] => thrower2
|
||||
[args] => Array
|
||||
(
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
)
|
@ -2236,7 +2236,9 @@ ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int
|
||||
|
||||
while (prev) {
|
||||
if (prev->function_state.function &&
|
||||
prev->function_state.function->common.type != ZEND_USER_FUNCTION) {
|
||||
prev->function_state.function->common.type != ZEND_USER_FUNCTION &&
|
||||
!(prev->function_state.function->common.type == ZEND_INTERNAL_FUNCTION &&
|
||||
(prev->function_state.function->common.fn_flags & ZEND_ACC_CALL_VIA_HANDLER))) {
|
||||
break;
|
||||
}
|
||||
if (prev->op_array) {
|
||||
|
Loading…
Reference in New Issue
Block a user