Browse Source

Merge pull request #11680 from cakephp/valid-status-code

Throw exception when invalid response status code is used.
Mark Story 8 years ago
parent
commit
4ea39f71e9
2 changed files with 22 additions and 1 deletions
  1. 9 1
      src/Http/Response.php
  2. 13 0
      tests/TestCase/Http/ResponseTest.php

+ 9 - 1
src/Http/Response.php

@@ -975,11 +975,19 @@ class Response implements ResponseInterface
      * @param int $code The code to set.
      * @param string $reasonPhrase The response reason phrase.
      * @return void
+     * @throws \InvalidArgumentException For invalid status code arguments.
      */
     protected function _setStatus($code, $reasonPhrase = '')
     {
+        if (!isset($this->_statusCodes[$code])) {
+            throw new InvalidArgumentException(sprintf(
+                'Invalid status code: %s. Use a valid HTTP status code in range 1xx - 5xx.',
+                $code
+            ));
+        }
+
         $this->_status = $code;
-        if (empty($reasonPhrase) && isset($this->_statusCodes[$code])) {
+        if (empty($reasonPhrase)) {
             $reasonPhrase = $this->_statusCodes[$code];
         }
         $this->_reasonPhrase = $reasonPhrase;

+ 13 - 0
tests/TestCase/Http/ResponseTest.php

@@ -2836,6 +2836,19 @@ class ResponseTest extends TestCase
     }
 
     /**
+     * Test invalid status codes
+     *
+     * @return void
+     */
+    public function testWithStatusInvalid()
+    {
+        $this->expectException(\InvalidArgumentException::class);
+        $this->expectExceptionMessage('Invalid status code: 1001. Use a valid HTTP status code in range 1xx - 5xx.');
+        $response = new Response();
+        $response->withStatus(1001);
+    }
+
+    /**
      * Test get reason phrase.
      *
      * @return void