From 2a9192334eb6de56b55d5d9c1faab51ca2de2f9e Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Wed, 29 Mar 2017 15:09:45 +0200 Subject: [PATCH] Don't try to parse empty body if there is no body Fixes #3890 If we do a put request without a body the current code still tries to read the body. This patch makes sure that we do not try to read the body if the content length is 0. See RFC 2616 Section 4.3 Signed-off-by: Roeland Jago Douma --- lib/private/AppFramework/Http/Request.php | 2 ++ tests/lib/AppFramework/Http/RequestTest.php | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/private/AppFramework/Http/Request.php b/lib/private/AppFramework/Http/Request.php index fd43d46856..3f1e6fd951 100644 --- a/lib/private/AppFramework/Http/Request.php +++ b/lib/private/AppFramework/Http/Request.php @@ -401,6 +401,8 @@ class Request implements \ArrayAccess, \Countable, IRequest { protected function getContent() { // If the content can't be parsed into an array then return a stream resource. if ($this->method === 'PUT' + && $this->getHeader('Content-Length') !== 0 + && $this->getHeader('Content-Length') !== null && strpos($this->getHeader('Content-Type'), 'application/x-www-form-urlencoded') === false && strpos($this->getHeader('Content-Type'), 'application/json') === false ) { diff --git a/tests/lib/AppFramework/Http/RequestTest.php b/tests/lib/AppFramework/Http/RequestTest.php index cc4bbee2d8..f80bffcb48 100644 --- a/tests/lib/AppFramework/Http/RequestTest.php +++ b/tests/lib/AppFramework/Http/RequestTest.php @@ -305,7 +305,10 @@ class RequestTest extends \Test\TestCase { $vars = array( 'put' => $data, 'method' => 'PUT', - 'server' => array('CONTENT_TYPE' => 'image/png'), + 'server' => [ + 'CONTENT_TYPE' => 'image/png', + 'CONTENT_LENGTH' => strlen($data) + ], ); $request = new Request(