diff --git a/lib/filestorage/zip_archive.php b/lib/filestorage/zip_archive.php index 70b9d336f5d..b7d0fd68dde 100644 --- a/lib/filestorage/zip_archive.php +++ b/lib/filestorage/zip_archive.php @@ -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)) {