Updated all cases of exit() to return a valid code
Specific codes are as follows, but can easily be changed if a different order/breakdown makes more sense:
- 0: Success; everything executed as planned
- 1: Configuration Error; something is wrong with/in the configuration file(s)
- 2: Class Not Found; what it says
- 3: Driver Method Unsupported; the method you're trying to use on a Driver doesn't exist
- 4: File Not Found; 404 error
- 5: Database Error; something is broken in the database somewhere
- 6: Invalid Input; the user attempted to submit a request with invlaid characters in 1+ key names
7 through 26 are reserved for future use
- 27: Generic Error; generated by show_error() when the status code is >= 100
28 through 127 are errors generated by user applications, normally by using show_error() with a status code below 100
128 through 254 should not be used by applications, as they are reserved by system-level functions
- 255: PHP Fatal Error; automatically generated by PHP for fatal errors, and therefore not allowed for our use
Status codes below 100 are shifted up by 28 to place them in the user error range. It may make more sense to have these codes
left alone and instead shift the CI errors into the 101 through 127 space, but that's not what I opted for here.
It would probably also be a good idea to replace the hard-coded numbers with constants or some such, but I was in a bit of a
hurry when I made these changes, so I didn't look around for the best place to do this. With proper guidance, I could
easily amend this commit with another that uses such constant values.
Signed-off-by: Daniel Hunsaker <danhunsaker@gmail.com>
diff --git a/system/core/CodeIgniter.php b/system/core/CodeIgniter.php
index 8affde6..13826c3 100644
--- a/system/core/CodeIgniter.php
+++ b/system/core/CodeIgniter.php
@@ -188,7 +188,7 @@
if ($EXT->call_hook('cache_override') === FALSE
&& $OUT->_display_cache($CFG, $URI) === TRUE)
{
- exit;
+ exit(0);
}
/*
diff --git a/system/core/Common.php b/system/core/Common.php
index d494caf..d638720 100644
--- a/system/core/Common.php
+++ b/system/core/Common.php
@@ -1,3 +1,4 @@
+
<?php
/**
* CodeIgniter
@@ -175,7 +176,8 @@
// Note: We use exit() rather then show_error() in order to avoid a
// self-referencing loop with the Exceptions class
set_status_header(503);
- exit('Unable to locate the specified class: '.$class.'.php');
+ echo 'Unable to locate the specified class: '.$class.'.php';
+ exit(2);
}
// Keep track of what we just loaded
@@ -248,14 +250,16 @@
elseif ( ! $found)
{
set_status_header(503);
- exit('The configuration file does not exist.');
+ echo 'The configuration file does not exist.';
+ exit(1);
}
// Does the $config array exist in the file?
if ( ! isset($config) OR ! is_array($config))
{
set_status_header(503);
- exit('Your config file does not appear to be formatted correctly.');
+ echo 'Your config file does not appear to be formatted correctly.';
+ exit(1);
}
// Are any values being dynamically replaced?
@@ -367,9 +371,20 @@
*/
function show_error($message, $status_code = 500, $heading = 'An Error Was Encountered')
{
+ $status_code = abs($status_code);
+ if ($status_code < 100)
+ {
+ $exit_status = $status_code + 28;
+ $status_code = 500;
+ }
+ else
+ {
+ $exit_status = 27;
+ }
+
$_error =& load_class('Exceptions', 'core');
echo $_error->show_error($heading, $message, 'error_general', $status_code);
- exit;
+ exit($exit_status);
}
}
@@ -392,7 +407,7 @@
{
$_error =& load_class('Exceptions', 'core');
$_error->show_404($page, $log_error);
- exit;
+ exit(4);
}
}
@@ -514,11 +529,11 @@
if (strpos(php_sapi_name(), 'cgi') === 0)
{
- header('Status: '.$code.' '.$text, TRUE);
+ if (!headers_sent()) header('Status: '.$code.' '.$text, TRUE);
}
else
{
- header(($server_protocol ? $server_protocol : 'HTTP/1.1').' '.$code.' '.$text, TRUE, $code);
+ if (!headers_sent()) header(($server_protocol ? $server_protocol : 'HTTP/1.1').' '.$code.' '.$text, TRUE, $code);
}
}
}
diff --git a/system/core/Exceptions.php b/system/core/Exceptions.php
index e6023e7..f799d60 100644
--- a/system/core/Exceptions.php
+++ b/system/core/Exceptions.php
@@ -117,7 +117,7 @@
}
echo $this->show_error($heading, $message, 'error_404', 404);
- exit;
+ exit(4);
}
// --------------------------------------------------------------------
diff --git a/system/core/Input.php b/system/core/Input.php
index 82e22dd..8f37e44 100644
--- a/system/core/Input.php
+++ b/system/core/Input.php
@@ -745,7 +745,8 @@
if ( ! preg_match('/^[a-z0-9:_\/|-]+$/i', $str))
{
set_status_header(503);
- exit('Disallowed Key Characters.');
+ echo 'Disallowed Key Characters.';
+ exit(6);
}
// Clean UTF-8 if supported
diff --git a/system/core/Output.php b/system/core/Output.php
index a208414..7898d19 100644
--- a/system/core/Output.php
+++ b/system/core/Output.php
@@ -696,7 +696,7 @@
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && $last_modified <= strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']))
{
$this->set_status_header(304);
- exit;
+ exit(0);
}
else
{
diff --git a/system/database/DB_driver.php b/system/database/DB_driver.php
index 35ac8e8..cb2ef4a 100644
--- a/system/database/DB_driver.php
+++ b/system/database/DB_driver.php
@@ -1658,7 +1658,7 @@
$error =& load_class('Exceptions', 'core');
echo $error->show_error($heading, $message, 'error_db');
- exit;
+ exit(5);
}
// --------------------------------------------------------------------
diff --git a/system/helpers/download_helper.php b/system/helpers/download_helper.php
index 7294d50..d7691cb 100644
--- a/system/helpers/download_helper.php
+++ b/system/helpers/download_helper.php
@@ -141,7 +141,8 @@
// If we have raw data - just dump it
if ($data !== NULL)
{
- exit($data);
+ echo $data;
+ exit(0);
}
// Flush 1MB chunks of data
@@ -151,7 +152,7 @@
}
fclose($fp);
- exit;
+ exit(0);
}
}
diff --git a/system/helpers/url_helper.php b/system/helpers/url_helper.php
index a6536cf..9a01535 100644
--- a/system/helpers/url_helper.php
+++ b/system/helpers/url_helper.php
@@ -549,7 +549,7 @@
header('Location: '.$uri, TRUE, $code);
break;
}
- exit;
+ exit(0);
}
}
diff --git a/system/libraries/Driver.php b/system/libraries/Driver.php
index 4b35dce..bb73189 100644
--- a/system/libraries/Driver.php
+++ b/system/libraries/Driver.php
@@ -291,7 +291,7 @@
$trace = debug_backtrace();
_exception_handler(E_ERROR, "No such method '{$method}'", $trace[1]['file'], $trace[1]['line']);
- exit;
+ exit(3);
}
// --------------------------------------------------------------------
diff --git a/system/libraries/Trackback.php b/system/libraries/Trackback.php
index ecc7129..cc93b2e 100644
--- a/system/libraries/Trackback.php
+++ b/system/libraries/Trackback.php
@@ -212,7 +212,7 @@
public function send_error($message = 'Incomplete Information')
{
echo '<?xml version="1.0" encoding="utf-8"?'.">\n<response>\n<error>1</error>\n<message>".$message."</message>\n</response>";
- exit;
+ exit(0);
}
// --------------------------------------------------------------------
@@ -228,7 +228,7 @@
public function send_success()
{
echo '<?xml version="1.0" encoding="utf-8"?'.">\n<response>\n<error>0</error>\n</response>";
- exit;
+ exit(0);
}
// --------------------------------------------------------------------
diff --git a/system/libraries/Xmlrpcs.php b/system/libraries/Xmlrpcs.php
index d4524d2..465a196 100644
--- a/system/libraries/Xmlrpcs.php
+++ b/system/libraries/Xmlrpcs.php
@@ -170,7 +170,8 @@
header('Content-Type: text/xml');
header('Content-Length: '.strlen($payload));
- exit($payload);
+ echo $payload;
+ exit(0);
}
// --------------------------------------------------------------------