diff --git a/framework/yii/base/ErrorHandler.php b/framework/yii/base/ErrorHandler.php index 6077af6..c801fd4 100644 --- a/framework/yii/base/ErrorHandler.php +++ b/framework/yii/base/ErrorHandler.php @@ -149,6 +149,13 @@ class ErrorHandler extends Component $html .= '' . $this->htmlEncode($part) . '\\'; } $html = rtrim($html, '\\'); + } elseif (strpos($code, '()') !== false) { + // method/function call + $self = $this; + $html = preg_replace_callback('/^(.*)\(\)$/', function ($matches) use ($self) { + return '' . + $self->htmlEncode($matches[1]) . '()'; + }, $code); } return $html; } @@ -184,27 +191,35 @@ class ErrorHandler extends Component /** * Renders a single call stack element. - * @param string $file name where call has happened. - * @param integer $line number on which call has happened. + * @param string|null $file name where call has happened. + * @param integer|null $line number on which call has happened. + * @param string|null $class called class name. + * @param string|null $method called function/method name. * @param integer $index number of the call stack element. * @return string HTML content of the rendered call stack element. */ - public function renderCallStackItem($file, $line, $index) + public function renderCallStackItem($file, $line, $class, $method, $index) { - $line--; // adjust line number from one-based to zero-based - $lines = @file($file); - if ($line < 0 || $lines === false || ($lineCount = count($lines)) < $line + 1) { - return ''; - } + $lines = array(); + $begin = $end = 0; + if ($file !== null && $line !== null) { + $line--; // adjust line number from one-based to zero-based + $lines = @file($file); + if ($line < 0 || $lines === false || ($lineCount = count($lines)) < $line + 1) { + return ''; + } - $half = (int)(($index == 0 ? $this->maxSourceLines : $this->maxTraceSourceLines) / 2); - $begin = $line - $half > 0 ? $line - $half : 0; - $end = $line + $half < $lineCount ? $line + $half : $lineCount - 1; + $half = (int)(($index == 0 ? $this->maxSourceLines : $this->maxTraceSourceLines) / 2); + $begin = $line - $half > 0 ? $line - $half : 0; + $end = $line + $half < $lineCount ? $line + $half : $lineCount - 1; + } $view = new View(); return $view->renderFile($this->callStackItemView, array( 'file' => $file, 'line' => $line, + 'class' => $class, + 'method' => $method, 'index' => $index, 'lines' => $lines, 'begin' => $begin, @@ -219,7 +234,7 @@ class ErrorHandler extends Component */ public function isCoreFile($file) { - return $file === 'unknown' || strpos(realpath($file), YII_PATH . DIRECTORY_SEPARATOR) === 0; + return $file === null || strpos(realpath($file), YII_PATH . DIRECTORY_SEPARATOR) === 0; } /** diff --git a/framework/yii/views/errorHandler/callStackItem.php b/framework/yii/views/errorHandler/callStackItem.php index 2139c46..fbfa367 100644 --- a/framework/yii/views/errorHandler/callStackItem.php +++ b/framework/yii/views/errorHandler/callStackItem.php @@ -1,8 +1,10 @@ context; ?> -
htmlEncode($lines[$i]); ?>+ +
htmlEncode($lines[$i]); ?>+