From d1c7076929474a5280ec1f8fe5276613f8751164 Mon Sep 17 00:00:00 2001 From: PJ Dietz Date: Tue, 17 Mar 2020 12:10:20 -0400 Subject: [PATCH] ServerRequest does not include empty Content-type and -length headers --- src/Message/ServerRequest.php | 13 ++++++++++++- test/tests/unit/Message/ServerRequestTest.php | 14 ++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/Message/ServerRequest.php b/src/Message/ServerRequest.php index ed9068d..49cc798 100644 --- a/src/Message/ServerRequest.php +++ b/src/Message/ServerRequest.php @@ -485,7 +485,7 @@ class ServerRequest extends Request implements ServerRequestInterface if (substr($name, 0, 5) === "HTTP_") { $name = $this->normalizeHeaderName(substr($name, 5)); $headers[$name] = $value; - } elseif ($name === "CONTENT_LENGTH" || $name === "CONTENT_TYPE") { + } elseif ($this->isContentHeader($name, $value)) { $name = $this->normalizeHeaderName($name); $headers[$name] = $value; } @@ -493,6 +493,17 @@ class ServerRequest extends Request implements ServerRequestInterface return $headers; } + /** + * @param $name + * @param $value + * @return bool + */ + private function isContentHeader($name, $value) + { + return ($name === "CONTENT_LENGTH" || $name === "CONTENT_TYPE") + && trim($value); + } + /** * @param string $name * @return string diff --git a/test/tests/unit/Message/ServerRequestTest.php b/test/tests/unit/Message/ServerRequestTest.php index 68407ff..83faa54 100644 --- a/test/tests/unit/Message/ServerRequestTest.php +++ b/test/tests/unit/Message/ServerRequestTest.php @@ -135,6 +135,20 @@ class ServerRequestTest extends TestCase $this->assertEquals("application/json", $request->getHeaderLine("Content-type")); } + /** + * @backupGlobals enabled + */ + public function testGetServerRequestDoesNotReadEmptyContentHeaders() + { + $_SERVER = [ + "CONTENT_LENGTH" => "", + "CONTENT_TYPE" => " " + ]; + $request = ServerRequest::getServerRequest(); + $this->assertFalse($request->hasHeader("Content-length")); + $this->assertFalse($request->hasHeader("Content-type")); + } + public function testGetServerRequestReadsBody() { $body = new NullStream();