From 849b86b1f6190d1df6daef6e432673a3ef1e6ad6 Mon Sep 17 00:00:00 2001 From: Mohamed Said Date: Fri, 2 Sep 2016 23:34:45 +0200 Subject: [PATCH 1/3] fix multifile uploads when empty --- src/Illuminate/Http/Request.php | 23 ++++++++++++++++++++++- tests/Http/HttpRequestTest.php | 19 +++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/Illuminate/Http/Request.php b/src/Illuminate/Http/Request.php index 35e23e5dcbe4..60fde1d513b7 100644 --- a/src/Illuminate/Http/Request.php +++ b/src/Illuminate/Http/Request.php @@ -864,7 +864,28 @@ public static function createFromBase(SymfonyRequest $request) */ public function duplicate(array $query = null, array $request = null, array $attributes = null, array $cookies = null, array $files = null, array $server = null) { - return parent::duplicate($query, $request, $attributes, $cookies, array_filter((array) $files), $server); + return parent::duplicate($query, $request, $attributes, $cookies, $this->filterFiles($files), $server); + } + + /** + * Filter the given request files. + * + * @param array $files + * @return mixed + */ + private function filterFiles($files) + { + foreach ($files as $key => $file) { + if (is_array($file)) { + $files[$key] = $this->filterFiles($files[$key]); + } + + if (is_null($files[$key]) || empty($files[$key])) { + unset($files[$key]); + } + } + + return $files; } /** diff --git a/tests/Http/HttpRequestTest.php b/tests/Http/HttpRequestTest.php index 333c459c5ac3..9c029e039bf4 100644 --- a/tests/Http/HttpRequestTest.php +++ b/tests/Http/HttpRequestTest.php @@ -454,6 +454,25 @@ public function testInputWithEmptyFilename() $request = Request::createFromBase($baseRequest); } + public function testMultipleFileUploadWithEmptyValue() + { + $invalidFiles = [ + 'file' => [ + 'name' => [''], + 'type' => [''], + 'tmp_name' => [''], + 'error' => [4], + 'size' => [0], + ], + ]; + + $baseRequest = SymfonyRequest::create('/?boom=breeze', 'GET', ['foo' => ['bar' => 'baz']], [], $invalidFiles); + + $request = Request::createFromBase($baseRequest); + + $this->assertEmpty($request->files->all()); + } + public function testOldMethodCallsSession() { $request = Request::create('/', 'GET'); From 6f6f9c87253b65030926b35fd0193d4733064919 Mon Sep 17 00:00:00 2001 From: Mohamed Said Date: Fri, 2 Sep 2016 23:44:22 +0200 Subject: [PATCH 2/3] simplify --- src/Illuminate/Http/Request.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Illuminate/Http/Request.php b/src/Illuminate/Http/Request.php index 60fde1d513b7..32088ed6052f 100644 --- a/src/Illuminate/Http/Request.php +++ b/src/Illuminate/Http/Request.php @@ -880,7 +880,7 @@ private function filterFiles($files) $files[$key] = $this->filterFiles($files[$key]); } - if (is_null($files[$key]) || empty($files[$key])) { + if (! $files[$key]) { unset($files[$key]); } } From 782d14ad4a8d3f54fa6c3a00f047e0a34e7b2403 Mon Sep 17 00:00:00 2001 From: Mohamed Said Date: Sat, 3 Sep 2016 13:17:57 +0200 Subject: [PATCH 3/3] make it protected --- src/Illuminate/Http/Request.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Illuminate/Http/Request.php b/src/Illuminate/Http/Request.php index 32088ed6052f..728cd485541c 100644 --- a/src/Illuminate/Http/Request.php +++ b/src/Illuminate/Http/Request.php @@ -873,7 +873,7 @@ public function duplicate(array $query = null, array $request = null, array $att * @param array $files * @return mixed */ - private function filterFiles($files) + protected function filterFiles($files) { foreach ($files as $key => $file) { if (is_array($file)) {