[BUGFIX] Always exclude E_USER_DEPRECATED from exceptionalErrors 52/56752/6
authorHelmut Hummel <typo3@helhum.io>
Fri, 20 Apr 2018 10:28:28 +0000 (12:28 +0200)
committerHelmut Hummel <typo3@helhum.io>
Sat, 21 Apr 2018 12:26:20 +0000 (14:26 +0200)
There is a limited use case for exceptions to be thrown
on deprecation messages. To ease the upgrade path to TYPO3 9
and to not allow "accidental" configuration that breaks the system,
deprecation messages will never throw exceptions.

Users with other use cases, can still implement and configure their
own exception handler.

Resolves: #84802
Releases: master
Change-Id: Iebbc2c201ba8bb68fa5725b90fba516d37d168be
Reviewed-on: https://review.typo3.org/56752
Reviewed-by: Markus Klein <markus.klein@typo3.org>
Tested-by: Markus Klein <markus.klein@typo3.org>
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Jan Stockfisch <jan.stockfisch@googlemail.com>
Reviewed-by: Mathias Schreiber <mathias.schreiber@typo3.com>
Tested-by: Mathias Schreiber <mathias.schreiber@typo3.com>
Reviewed-by: Helmut Hummel <typo3@helhum.io>
Tested-by: Helmut Hummel <typo3@helhum.io>
typo3/sysext/core/Classes/Error/ErrorHandler.php
typo3/sysext/core/Configuration/DefaultConfigurationDescription.yaml

index 1a179f2..5435cf0 100644 (file)
@@ -65,7 +65,10 @@ class ErrorHandler implements ErrorHandlerInterface, LoggerAwareInterface
      */
     public function setExceptionalErrors($exceptionalErrors)
     {
-        $this->exceptionalErrors = (int)$exceptionalErrors;
+        $exceptionalErrors = (int)$exceptionalErrors;
+        // We always disallow E_USER_DEPRECATED to generate exceptions as this may cause
+        // bad user experience specifically during upgrades.
+        $this->exceptionalErrors = $exceptionalErrors & ~E_USER_DEPRECATED;
     }
 
     /**
index 2ab4a5c..de847ec 100644 (file)
@@ -192,7 +192,7 @@ SYS:
             description: 'The E_* constant that will be handled by the [SYS][errorHandler]. Not all PHP error types can be handled! Default is 30466 = <code>E_ALL & ~(E_STRICT | E_NOTICE | E_COMPILE_WARNING | E_COMPILE_ERROR | E_CORE_WARNING | E_CORE_ERROR | E_PARSE | E_ERROR)</code> (see <a href="http://php.net/manual/en/errorfunc.constants.php" target="_blank">PHP documentation</a>).'
         exceptionalErrors:
             type: errors
-            description: 'The E_* constant that will be converted into an exception by the default [SYS][errorHandler]. Default is 4096 = <code>E_ALL & ~(E_STRICT | E_NOTICE | E_COMPILE_WARNING | E_COMPILE_ERROR | E_CORE_WARNING | E_CORE_ERROR | E_PARSE | E_ERROR | E_DEPRECATED | E_USER_DEPRECATED | E_WARNING | E_USER_ERROR | E_USER_NOTICE | E_USER_WARNING)</code> (see <a href="http://php.net/manual/en/errorfunc.constants.php" target="_blank">PHP documentation</a>).'
+            description: 'The E_* constant that will be converted into an exception by the default [SYS][errorHandler]. Default is 4096 = <code>E_ALL & ~(E_STRICT | E_NOTICE | E_COMPILE_WARNING | E_COMPILE_ERROR | E_CORE_WARNING | E_CORE_ERROR | E_PARSE | E_ERROR | E_DEPRECATED | E_USER_DEPRECATED | E_WARNING | E_USER_ERROR | E_USER_NOTICE | E_USER_WARNING)</code> (see <a href="http://php.net/manual/en/errorfunc.constants.php" target="_blank">PHP documentation</a>). E_USER_DEPRECATED is always excluded to avoid exceptions to be thrown for deprecation messages.'
         belogErrorReporting:
             type: errors
             description: 'Configures which PHP errors should be logged to the "syslog" database table (extension: belog). If set to "0" no PHP errors are logged to the sys_log table. Default is 30711 = <code>E_ALL & ~(E_STRICT | E_NOTICE)</code> (see <a href="http://php.net/manual/en/errorfunc.constants.php" target="_blank">PHP documentation</a>).'