[BUGFIX] Error handler callback causes fatal error for parse time errors
authorMarcus Krause <marcus@t3sec.info>
Sat, 22 Sep 2012 12:09:36 +0000 (14:09 +0200)
committerChristian Kuhn <lolli@schwarzbu.ch>
Sat, 22 Sep 2012 16:45:12 +0000 (18:45 +0200)
TYPO3's error handler callback t3lib_error_ErrorHandler::handleError()
causes a fatal error for PHP parse time errors.

If an error occurs during parse time (like E_DEPRECATED due to
deprecated $foo =& stdClass() code), autoloading is not available
and such PHP standard class 'Exception' (extended by t3lib_exception)
is not resolvable.
This results in a fatal and misleading error
'Class "Exception" not found'
together with a not useful backtrace. Additionally this behaviour
hides the original causing error (deprecated code).

Change-Id: I4ab97c1bf2d888022369f2095285cecc5a4c54a4
Fixes: #31834
Related: #31827
Releases: 4.5, 4.6, 4.7, 6.0
Reviewed-on: http://review.typo3.org/14927
Reviewed-by: Markus Klein
Tested-by: Markus Klein
Reviewed-by: Christian Kuhn
Tested-by: Christian Kuhn
t3lib/error/class.t3lib_error_errorhandler.php

index f1c423f..408f514 100644 (file)
@@ -98,6 +98,13 @@ class t3lib_error_ErrorHandler implements t3lib_error_ErrorHandlerInterface {
                $message = 'PHP ' . $errorLevels[$errorLevel] . ': ' . $errorMessage . ' in ' . $errorFile . ' line ' . $errorLine;
 
                if ($errorLevel & $this->exceptionalErrors) {
+                               // Handle error raised at early parse time
+                               // autoloader not available & built-in classes not resolvable
+                       if (!class_exists('stdClass', FALSE)) {
+                               $message = 'PHP ' . $errorLevels[$errorLevel] . ': ' . $errorMessage . ' in ' . basename($errorFile) . 'line ' . $errorLine;
+                               die($message);
+                       }
+
                                // We need to manually require the exception classes in case the autoloader is not available at this point yet.
                                // @see http://forge.typo3.org/issues/23444
                        if (!class_exists('t3lib_error_Exception', FALSE)) {