MDL-54916 filestorage: Only write empty zip on change.

In some cases we may inspect an empty zip file. If we do open
an empty zip file, check that it changed before we attempt to write
it to disk.  It may be the case that we were reading the file from
a location that we don't have write access to.
This commit is contained in:
Russell Smith
2016-11-07 16:20:48 +01:00
committed by Eloy Lafuente (stronk7)
parent eee689975a
commit 12abdd7cbc
+6
View File
@@ -207,6 +207,12 @@ class zip_archive extends file_archive {
$this->mode = null;
$this->namelookup = null;
$this->modified = false;
// If the existing archive is already empty, we didn't change it. Don't bother completing a save.
// This is important when we are inspecting archives that we might not have write permission to.
if (@filesize($this->archivepathname) == 22 &&
@file_get_contents($this->archivepathname) === base64_decode(self::$emptyzipcontent)) {
return true;
}
@unlink($this->archivepathname);
$data = base64_decode(self::$emptyzipcontent);
if (!file_put_contents($this->archivepathname, $data)) {