diff options
| author | Felipe Pena <felipe@php.net> | 2010-03-07 02:17:11 +0000 |
|---|---|---|
| committer | Felipe Pena <felipe@php.net> | 2010-03-07 02:17:11 +0000 |
| commit | f867fadd22a68b2d92c621d522842b285f41e4ad (patch) | |
| tree | 6b4d88bdadb6c2abfbea294ace3dfa581b38ac82 | |
| parent | 4149bb3dfd9c4fa67164099959feb8b819ae81da (diff) | |
| download | php-git-f867fadd22a68b2d92c621d522842b285f41e4ad.tar.gz | |
- Fixed bug #50383 (Exceptions thrown in __call / __callStatic do not include file and line in trace)
| -rw-r--r-- | NEWS | 2 | ||||
| -rw-r--r-- | Zend/tests/bug50383.phpt | 130 | ||||
| -rw-r--r-- | Zend/zend_builtin_functions.c | 4 |
3 files changed, 135 insertions, 1 deletions
@@ -22,6 +22,8 @@ PHP NEWS - Fixed bug #50810 (property_exists does not work for private). (Felipe) - Fixed bug #50731 (Inconsistent namespaces sent to functions registered with spl_autoload_register). (Felipe) +- Fixed bug #50383 (Exceptions thrown in __call / __callStatic do not include + file and line in trace). (Felipe) - Fixed bug #50358 (Compile failure compiling ext/phar/util.lo). (Felipe) ?? ??? 20??, PHP 5.3.2 diff --git a/Zend/tests/bug50383.phpt b/Zend/tests/bug50383.phpt new file mode 100644 index 0000000000..2210c4bc35 --- /dev/null +++ b/Zend/tests/bug50383.phpt @@ -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 + ( + ) + + ) + +) diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index 4c96e19975..0807341f52 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -2148,7 +2148,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) { |
