From 250bdbeef287ffcaf8d3b75b2cc027a79fad35a8 Mon Sep 17 00:00:00 2001 From: Rob Allen Date: Thu, 10 Mar 2016 09:05:16 +0000 Subject: [PATCH] Ensure getParsedBody() return null if body is not parsed PSR-7 states that getParsedBody() must return null, an array or an object. If we can't parse the body as there's no media type parser available, then return null. Fixes #1807 --- Slim/Http/Request.php | 3 ++- tests/Http/RequestTest.php | 22 ++++++++++++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/Slim/Http/Request.php b/Slim/Http/Request.php index 741e45e65..d6c77f9a2 100644 --- a/Slim/Http/Request.php +++ b/Slim/Http/Request.php @@ -978,9 +978,10 @@ public function getParsedBody() ); } $this->bodyParsed = $parsed; + return $this->bodyParsed; } - return $this->bodyParsed; + return null; } /** diff --git a/tests/Http/RequestTest.php b/tests/Http/RequestTest.php index 1aad269b8..ec27eb2d3 100644 --- a/tests/Http/RequestTest.php +++ b/tests/Http/RequestTest.php @@ -20,9 +20,9 @@ class RequestTest extends \PHPUnit_Framework_TestCase { - public function requestFactory() + public function requestFactory($envData = []) { - $env = Environment::mock(); + $env = Environment::mock($envData); $uri = Uri::createFromString('https://example.com:443/foo/bar?abc=123'); $headers = Headers::createFromEnvironment($env); @@ -836,6 +836,24 @@ public function testWithParsedBodyNull() $this->assertNull($clone->getParsedBody()); } + public function testGetParsedBodyReturnsNullWhenThereIsNoBodyData() + { + $request = $this->requestFactory(['REQUEST_METHOD' => 'POST']); + + $this->assertNull($request->getParsedBody()); + } + + public function testGetParsedBodyReturnsNullWhenThereIsNoMediaTypeParserRegistered() + { + $request = $this->requestFactory([ + 'REQUEST_METHOD' => 'POST', + 'CONTENT_TYPE' => 'text/csv', + ]); + $request->getBody()->write('foo,bar,baz'); + + $this->assertNull($request->getParsedBody()); + } + /** * @expectedException \InvalidArgumentException */