diff --git a/src/Illuminate/Http/Request.php b/src/Illuminate/Http/Request.php index 35e23e5dcbe4..728cd485541c 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 + */ + protected function filterFiles($files) + { + foreach ($files as $key => $file) { + if (is_array($file)) { + $files[$key] = $this->filterFiles($files[$key]); + } + + if (! $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');