From 340278b59c502c225431a69d25ea8f48e82b0c42 Mon Sep 17 00:00:00 2001
From: Alexander Makarov <sam@rmcreative.ru>
Date: Wed, 30 Apr 2014 01:30:49 +0400
Subject: [PATCH] Fixes #3183: fixed regression after #3175

---
 framework/views/errorHandler/error.php             |  5 ++---
 framework/views/errorHandler/exception.php         | 23 +++++++++++++++--------
 framework/views/errorHandler/previousException.php |  5 +++--
 framework/web/ErrorHandler.php                     | 13 +++++++++++++
 4 files changed, 33 insertions(+), 13 deletions(-)

diff --git a/framework/views/errorHandler/error.php b/framework/views/errorHandler/error.php
index 22b3512..f3f1e52 100644
--- a/framework/views/errorHandler/error.php
+++ b/framework/views/errorHandler/error.php
@@ -8,9 +8,8 @@ if ($exception instanceof \yii\web\HttpException) {
 } else {
     $code = $exception->getCode();
 }
-if ($exception instanceof \yii\base\Exception) {
-    $name = $exception->getName();
-} else {
+$name = $handler->getExceptionName($exception);
+if ($name === null) {
     $name = 'Error';
 }
 if ($code) {
diff --git a/framework/views/errorHandler/exception.php b/framework/views/errorHandler/exception.php
index 1b7629b..0dc0cb9 100644
--- a/framework/views/errorHandler/exception.php
+++ b/framework/views/errorHandler/exception.php
@@ -12,12 +12,16 @@
     <meta charset="utf-8"/>
 
     <title><?php
+        $name = $handler->getExceptionName($exception);
         if ($exception instanceof \yii\web\HttpException) {
-            echo (int) $exception->statusCode . ' ' . $handler->htmlEncode($exception->getName());
-        } elseif ($exception instanceof \yii\base\Exception) {
-            echo $handler->htmlEncode($exception->getName() . ' – ' . get_class($exception));
+            echo (int) $exception->statusCode . ' ' . $handler->htmlEncode($name);
         } else {
-            echo $handler->htmlEncode(get_class($exception));
+            $name = $handler->getExceptionName($exception);
+            if ($name !== null) {
+                echo $handler->htmlEncode($name . ' – ' . get_class($exception));
+            } else {
+                echo $handler->htmlEncode(get_class($exception));
+            }
         }
     ?></title>
 
@@ -331,11 +335,14 @@ html,body{
                 if ($exception instanceof \yii\web\HttpException) {
                     echo '<span>' . $handler->createHttpStatusLink($exception->statusCode, $handler->htmlEncode($exception->getName())) . '</span>';
                     echo ' &ndash; ' . $handler->addTypeLinks(get_class($exception));
-                } elseif ($exception instanceof \yii\base\Exception) {
-                    echo '<span>' . $handler->htmlEncode($exception->getName()) . '</span>';
-                    echo ' &ndash; ' . $handler->addTypeLinks(get_class($exception));
                 } else {
-                    echo '<span>' . $handler->htmlEncode(get_class($exception)) . '</span>';
+                    $name = $handler->getExceptionName($exception);
+                    if ($name !== null) {
+                        echo '<span>' . $handler->htmlEncode($name) . '</span>';
+                        echo ' &ndash; ' . $handler->addTypeLinks(get_class($exception));
+                    } else {
+                        echo '<span>' . $handler->htmlEncode(get_class($exception)) . '</span>';
+                    }
                 }
             ?></h1>
         <?php endif; ?>
diff --git a/framework/views/errorHandler/previousException.php b/framework/views/errorHandler/previousException.php
index 8376434..762532b 100644
--- a/framework/views/errorHandler/previousException.php
+++ b/framework/views/errorHandler/previousException.php
@@ -8,8 +8,9 @@
     <span class="arrow">&crarr;</span>
     <h2>
         <span>Caused by:</span>
-        <?php if ($exception instanceof \yii\base\Exception): ?>
-            <span><?= $handler->htmlEncode($exception->getName()) ?></span> &ndash;
+        <?php $name = $handler->getExceptionName($exception);
+            if ($name !== null): ?>
+            <span><?= $handler->htmlEncode($name) ?></span> &ndash;
             <?= $handler->addTypeLinks(get_class($exception)) ?>
         <?php else: ?>
             <span><?= $handler->htmlEncode(get_class($exception)) ?></span>
diff --git a/framework/web/ErrorHandler.php b/framework/web/ErrorHandler.php
index 2c419a3..58ca13c 100644
--- a/framework/web/ErrorHandler.php
+++ b/framework/web/ErrorHandler.php
@@ -379,4 +379,17 @@ class ErrorHandler extends \yii\base\ErrorHandler
 
         return $out;
     }
+
+    /**
+     * Returns human-readable exception name
+     * @param \Exception $exception
+     * @return string human-readable exception name or null if it cannot be determined
+     */
+    public function getExceptionName($exception)
+    {
+        if ($exception instanceof \yii\base\Exception || $exception instanceof \yii\base\InvalidCallException || $exception instanceof \yii\base\InvalidParamException || $exception instanceof \yii\base\UnknownMethodException) {
+            return $exception->getName();
+        }
+        return null;
+    }
 }
--
libgit2 0.27.1