Merge branch '4.4' into 5.1

* 4.4:
  [Filesystem] fix cleaning up tmp files when dumpFile() fails
  [MimeType] Add missing alias for @mime_type
This commit is contained in:
Jérémy Derussé 2020-11-12 10:58:18 +01:00
commit 9bff2e7aed
No known key found for this signature in database
GPG Key ID: 2083FA5758C473D2
3 changed files with 24 additions and 6 deletions

View File

@ -12,5 +12,7 @@
<argument type="service" id="mime_types" /> <argument type="service" id="mime_types" />
</call> </call>
</service> </service>
<service id="Symfony\Component\Mime\MimeTypesInterface" alias="mime_types" />
<service id="Symfony\Component\Mime\MimeTypeGuesserInterface" alias="mime_types" />
</services> </services>
</container> </container>

View File

@ -658,13 +658,17 @@ class Filesystem
// when the filesystem supports chmod. // when the filesystem supports chmod.
$tmpFile = $this->tempnam($dir, basename($filename)); $tmpFile = $this->tempnam($dir, basename($filename));
if (false === @file_put_contents($tmpFile, $content)) { try {
throw new IOException(sprintf('Failed to write file "%s".', $filename), 0, null, $filename); if (false === @file_put_contents($tmpFile, $content)) {
throw new IOException(sprintf('Failed to write file "%s".', $filename), 0, null, $filename);
}
@chmod($tmpFile, file_exists($filename) ? fileperms($filename) : 0666 & ~umask());
$this->rename($tmpFile, $filename, true);
} finally {
@unlink($tmpFile);
} }
@chmod($tmpFile, file_exists($filename) ? fileperms($filename) : 0666 & ~umask());
$this->rename($tmpFile, $filename, true);
} }
/** /**

View File

@ -1720,6 +1720,18 @@ class FilesystemTest extends FilesystemTestCase
$this->assertStringEqualsFile($filename, 'bar'); $this->assertStringEqualsFile($filename, 'bar');
} }
public function testDumpRemovesTmpFilesOnFailure()
{
$expected = scandir(__DIR__, \SCANDIR_SORT_ASCENDING);
try {
$this->filesystem->dumpFile(__DIR__.'/Fixtures', 'bar');
$this->fail('IOException expected.');
} catch (IOException $e) {
$this->assertSame($expected, scandir(__DIR__, \SCANDIR_SORT_ASCENDING));
}
}
public function testDumpKeepsExistingPermissionsWhenOverwritingAnExistingFile() public function testDumpKeepsExistingPermissionsWhenOverwritingAnExistingFile()
{ {
$this->markAsSkippedIfChmodIsMissing(); $this->markAsSkippedIfChmodIsMissing();