diff --git a/typo3/sysext/core/Classes/Http/ServerRequestFactory.php b/typo3/sysext/core/Classes/Http/ServerRequestFactory.php index 85b5aec569d224dd7b7a1597d72f73380206f68b..1939d29a5dcf08fbd84c001306bfdcfc6ccd6b51 100644 --- a/typo3/sysext/core/Classes/Http/ServerRequestFactory.php +++ b/typo3/sysext/core/Classes/Http/ServerRequestFactory.php @@ -110,7 +110,10 @@ class ServerRequestFactory { $normalizedFileUploads[$key] = $value; } elseif (is_array($value)) { if (isset($value['tmp_name'])) { - $normalizedFileUploads[$key] = self::createUploadedFile($value); + $uploadedFiles = self::createUploadedFile($value); + if ($uploadedFiles) { + $normalizedFileUploads[$key] = $uploadedFiles; + } } else { $normalizedFileUploads[$key] = self::normalizeUploadedFiles($value); } @@ -128,7 +131,7 @@ class ServerRequestFactory { * recursively resolve uploaded files. * * @param array $value $_FILES structure - * @return UploadedFileInterface[]|UploadedFileInterface + * @return UploadedFileInterface[]|UploadedFileInterface|NULL */ protected static function createUploadedFile(array $value) { if (is_array($value['tmp_name'])) { @@ -141,12 +144,16 @@ class ServerRequestFactory { 'name' => $value['name'][$key], 'type' => $value['type'][$key] ); - $files[$key] = self::createUploadedFile($data); + $result = self::createUploadedFile($data); + if ($result) { + $files[$key] = $result; + } } return $files; - } else { + } elseif (!empty($value['tmp_name'])) { return new UploadedFile($value['tmp_name'], $value['size'], $value['error'], $value['name'], $value['type']); } + return NULL; } } diff --git a/typo3/sysext/core/Tests/Unit/Http/ServerRequestFactoryTest.php b/typo3/sysext/core/Tests/Unit/Http/ServerRequestFactoryTest.php index 88a5213d29baf771cbfcff19d4a853a77d9580dc..d1f7b2147be1f569111073b82d8a68f5dad097cb 100644 --- a/typo3/sysext/core/Tests/Unit/Http/ServerRequestFactoryTest.php +++ b/typo3/sysext/core/Tests/Unit/Http/ServerRequestFactoryTest.php @@ -81,4 +81,37 @@ class ServerRequestFactoryTest extends \TYPO3\CMS\Core\Tests\UnitTestCase { $this->assertTrue($uploadedFiles['tx_uploadexample_piexample']['newExample']['imageCollection'][0] instanceof UploadedFile); } + /** + * @test + */ + public function uploadedFilesAreNotCreatedForEmptyFilesArray() { + $_SERVER['HTTP_HOST'] = 'localhost'; + $_SERVER['REQUEST_URI'] = '/index.php'; + $_FILES = array(); + + $uploadedFiles = ServerRequestFactory::fromGlobals()->getUploadedFiles(); + + $this->assertEmpty($uploadedFiles); + } + + /** + * @test + */ + public function uploadedFilesAreNotCreatedIfTmpNameIsEmpty() { + $_SERVER['HTTP_HOST'] = 'localhost'; + $_SERVER['REQUEST_URI'] = '/index.php'; + $_FILES = array( + 'tx_uploadexample_piexample' => array( + 'name' => '', + 'tmp_name' => '', + 'error' => 4, + 'size' => 0, + ), + ); + + $uploadedFiles = ServerRequestFactory::fromGlobals()->getUploadedFiles(); + + $this->assertEmpty($uploadedFiles); + } + }