Skip to content

Commit 8725d38

Browse files
authored
Merge pull request #6254 from kenjis/fix-exceptionHandler-statusCode-min
fix: exceptionHandler may cause HTTPException: Unknown HTTP status code
2 parents d75e426 + 50fa7ad commit 8725d38

2 files changed

Lines changed: 18 additions & 10 deletions

File tree

app/Config/Constants.php

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -67,16 +67,16 @@
6767
| http://tldp.org/LDP/abs/html/exitcodes.html
6868
|
6969
*/
70-
defined('EXIT_SUCCESS') || define('EXIT_SUCCESS', 0); // no errors
71-
defined('EXIT_ERROR') || define('EXIT_ERROR', 1); // generic error
72-
defined('EXIT_CONFIG') || define('EXIT_CONFIG', 3); // configuration error
73-
defined('EXIT_UNKNOWN_FILE') || define('EXIT_UNKNOWN_FILE', 4); // file not found
74-
defined('EXIT_UNKNOWN_CLASS') || define('EXIT_UNKNOWN_CLASS', 5); // unknown class
70+
defined('EXIT_SUCCESS') || define('EXIT_SUCCESS', 0); // no errors
71+
defined('EXIT_ERROR') || define('EXIT_ERROR', 1); // generic error
72+
defined('EXIT_CONFIG') || define('EXIT_CONFIG', 3); // configuration error
73+
defined('EXIT_UNKNOWN_FILE') || define('EXIT_UNKNOWN_FILE', 4); // file not found
74+
defined('EXIT_UNKNOWN_CLASS') || define('EXIT_UNKNOWN_CLASS', 5); // unknown class
7575
defined('EXIT_UNKNOWN_METHOD') || define('EXIT_UNKNOWN_METHOD', 6); // unknown class member
76-
defined('EXIT_USER_INPUT') || define('EXIT_USER_INPUT', 7); // invalid user input
77-
defined('EXIT_DATABASE') || define('EXIT_DATABASE', 8); // database error
78-
defined('EXIT__AUTO_MIN') || define('EXIT__AUTO_MIN', 9); // lowest automatically-assigned error code
79-
defined('EXIT__AUTO_MAX') || define('EXIT__AUTO_MAX', 125); // highest automatically-assigned error code
76+
defined('EXIT_USER_INPUT') || define('EXIT_USER_INPUT', 7); // invalid user input
77+
defined('EXIT_DATABASE') || define('EXIT_DATABASE', 8); // database error
78+
defined('EXIT__AUTO_MIN') || define('EXIT__AUTO_MIN', 9); // lowest automatically-assigned error code
79+
defined('EXIT__AUTO_MAX') || define('EXIT__AUTO_MAX', 125); // highest automatically-assigned error code
8080

8181
/**
8282
* @deprecated Use \CodeIgniter\Events\Events::PRIORITY_LOW instead.

system/Debug/Exceptions.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use CodeIgniter\API\ResponseTrait;
1515
use CodeIgniter\Exceptions\PageNotFoundException;
1616
use CodeIgniter\HTTP\CLIRequest;
17+
use CodeIgniter\HTTP\Exceptions\HTTPException;
1718
use CodeIgniter\HTTP\IncomingRequest;
1819
use CodeIgniter\HTTP\Response;
1920
use Config\Exceptions as ExceptionsConfig;
@@ -115,7 +116,14 @@ public function exceptionHandler(Throwable $exception)
115116
}
116117

117118
if (! is_cli()) {
118-
$this->response->setStatusCode($statusCode);
119+
try {
120+
$this->response->setStatusCode($statusCode);
121+
} catch (HTTPException $e) {
122+
// Workaround for invalid HTTP status code.
123+
$statusCode = 500;
124+
$this->response->setStatusCode($statusCode);
125+
}
126+
119127
if (! headers_sent()) {
120128
header(sprintf('HTTP/%s %s %s', $this->request->getProtocolVersion(), $this->response->getStatusCode(), $this->response->getReasonPhrase()), true, $statusCode);
121129
}

0 commit comments

Comments
 (0)