[BUGFIX] Fail with exit code for fatal errors during boot 95/47395/3
authorHelmut Hummel <info@helhum.io>
Sun, 27 Mar 2016 19:38:37 +0000 (21:38 +0200)
committerHelmut Hummel <helmut.hummel@typo3.org>
Wed, 30 Mar 2016 12:52:36 +0000 (14:52 +0200)
Especially for CI environments it is crucial that TYPO3
does not exit cleanly when a fatal error occurs.

Change from die (which exits with return code 0) to exit(1)
and send a http error code as well (in web requests)

Releases: master, 7.6
Resolves: #75280
Change-Id: I473de98366a5ea3629d968e2c1600f241b9e73a1
Reviewed-on: https://review.typo3.org/47395
Reviewed-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Tested-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Reviewed-by: Mathias Schreiber <mathias.schreiber@wmdb.de>
Tested-by: Mathias Schreiber <mathias.schreiber@wmdb.de>
Reviewed-by: Andreas Fernandez <typo3@scripting-base.de>
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Reviewed-by: Benni Mack <benni@typo3.org>
Tested-by: Benni Mack <benni@typo3.org>
Reviewed-by: Helmut Hummel <helmut.hummel@typo3.org>
Tested-by: Helmut Hummel <helmut.hummel@typo3.org>
typo3/sysext/core/Classes/Core/SystemEnvironmentBuilder.php
typo3/sysext/core/Tests/Testbase.php

index ccd352b..cc3d32c 100644 (file)
@@ -182,10 +182,10 @@ class SystemEnvironmentBuilder
     protected static function checkMainPathsExist()
     {
         if (!is_file(PATH_thisScript)) {
-            static::dieWithMessage('Unable to determine path to entry script.');
+            static::exitWithMessage('Unable to determine path to entry script.');
         }
         if (!is_dir(PATH_typo3 . 'sysext')) {
-            static::dieWithMessage('Calculated absolute path to typo3/sysext directory does not exist.' . LF . LF
+            static::exitWithMessage('Calculated absolute path to typo3/sysext directory does not exist.' . LF . LF
                 . 'Something in the main file, folder and link structure is wrong and must be fixed! A typical document root contains a couple of symbolic links:' . LF
                 . '* A symlink "typo3_src" pointing to the TYPO3 CMS core.' . LF
                 . '* A symlink "typo3" - the backend entry point - pointing to "typo3_src/typo3"' . LF
@@ -396,14 +396,23 @@ class SystemEnvironmentBuilder
     }
 
     /**
-     * Echo out a text message and die
+     * Send http headers, echo out a text message and exit with error code
      *
      * @param string $message
      */
-    protected static function dieWithMessage($message)
+    protected static function exitWithMessage($message)
     {
-        header('Content-type: text/plain');
-        die($message);
+        $headers = [
+            \TYPO3\CMS\Core\Utility\HttpUtility::HTTP_STATUS_500,
+            'Content-type: text/plain'
+        ];
+        if (!headers_sent()) {
+            foreach ($headers as $header) {
+                header($header);
+            }
+        }
+        echo $message . LF;
+        exit(1);
     }
 
     /**
index 5773412..2c20805 100644 (file)
@@ -86,7 +86,7 @@ class Testbase
         $_SERVER['SCRIPT_NAME'] = PATH_thisScript;
 
         if (!file_exists(PATH_thisScript)) {
-            die('Unable to determine path to entry script. Please check your path or set an environment variable \'TYPO3_PATH_WEB\' to your root path.');
+            $this->exitWithMessage('Unable to determine path to entry script. Please check your path or set an environment variable \'TYPO3_PATH_WEB\' to your root path.');
         }
     }
 
@@ -104,7 +104,7 @@ class Testbase
         }
 
         if (!file_exists(ORIGINAL_ROOT . 'typo3/cli_dispatch.phpsh')) {
-            die('Unable to determine path to entry script. Please check your path or set an environment variable \'TYPO3_PATH_WEB\' to your root path.');
+            $this->exitWithMessage('Unable to determine path to entry script. Please check your path or set an environment variable \'TYPO3_PATH_WEB\' to your root path.');
         }
     }
 
@@ -690,6 +690,26 @@ class Testbase
     }
 
     /**
+     * Send http headers, echo out a text message and exit with error code
+     *
+     * @param string $message
+     */
+    protected function exitWithMessage($message)
+    {
+        $headers = [
+            \TYPO3\CMS\Core\Utility\HttpUtility::HTTP_STATUS_500,
+            'Content-type: text/plain'
+        ];
+        if (!headers_sent()) {
+            foreach ($headers as $header) {
+                header($header);
+            }
+        }
+        echo $message . LF;
+        exit(1);
+    }
+
+    /**
      * Writes $content to the file $file. This is a simplified version
      * of GeneralUtility::writeFile that does not fix permissions.
      *