The script is halted and a '500 Internal Server Error' is issued when a fatal error occurs.

Signed-off-by: Jesse van Assen <jesse.v.assen@gmail.com>
diff --git a/system/core/Common.php b/system/core/Common.php
index 93cd0a0..7553f4a 100644
--- a/system/core/Common.php
+++ b/system/core/Common.php
@@ -577,6 +577,19 @@
 	 */
 	function _exception_handler($severity, $message, $filepath, $line)
 	{
+		$is_error = ((E_ERROR | E_COMPILE_ERROR | E_CORE_ERROR | E_USER_ERROR) & $severity) === $severity;
+
+		// When an error occurred, set the status header to '500 Internal Server Error'
+		// to indicate to the client something went wrong.
+		// This can't be done within the $_error->show_php_error method because
+		// it is only called when the display_errors flag is set (which isn't usually
+		// the case in a production environment) or when errors are ignored because
+		// they are above the error_reporting threshold.
+		if ($is_error)
+		{
+			set_status_header(500);
+		}
+
 		$_error =& load_class('Exceptions', 'core');
 
 		// Should we ignore the error? We'll get the current error_reporting
@@ -593,6 +606,14 @@
 		}
 
 		$_error->log_exception($severity, $message, $filepath, $line);
+
+		// If the error is fatal, the execution of the script should be stopped because
+		// errors can't be recovered from. Halting the script conforms with PHP's
+		// default error handling. See http://www.php.net/manual/en/errorfunc.constants.php
+		if ($is_error)
+		{
+			exit();
+		}
 	}
 }