diff --git a/lib/private/files/filesystem.php b/lib/private/files/filesystem.php index f90b2738d03f8651c98a9c5ca9d37743697ca922..0a0c5c3612a0a6e40b5455cfcd9a370806b783fa 100644 --- a/lib/private/files/filesystem.php +++ b/lib/private/files/filesystem.php @@ -175,7 +175,10 @@ class Filesystem { * @param callable $wrapper */ public static function addStorageWrapper($wrapperName, $wrapper) { - self::getLoader()->addStorageWrapper($wrapperName, $wrapper); + if (!self::getLoader()->addStorageWrapper($wrapperName, $wrapper)) { + // do not re-wrap if storage with this name already existed + return; + } $mounts = self::getMountManager()->getAll(); foreach ($mounts as $mount) { diff --git a/lib/private/files/storage/storagefactory.php b/lib/private/files/storage/storagefactory.php index c9e8d422f9d0ce00403dee87a1f5e0b8599d7d87..9c1c7325b76e025ecaf7c72295ec24e4cb2e9106 100644 --- a/lib/private/files/storage/storagefactory.php +++ b/lib/private/files/storage/storagefactory.php @@ -23,9 +23,15 @@ class StorageFactory implements IStorageFactory { * * @param string $wrapperName * @param callable $callback + * @return true if the wrapper was added, false if there was already a wrapper with this + * name registered */ public function addStorageWrapper($wrapperName, $callback) { + if (isset($this->storageWrappers[$wrapperName])) { + return false; + } $this->storageWrappers[$wrapperName] = $callback; + return true; } /** diff --git a/lib/public/files/storage/istoragefactory.php b/lib/public/files/storage/istoragefactory.php index 769d7011de4bb7e033a8a0ab156759b0a8b4147b..48c12e44cdde9d2d1a62eaa939c5e59b39fb2ed5 100644 --- a/lib/public/files/storage/istoragefactory.php +++ b/lib/public/files/storage/istoragefactory.php @@ -19,6 +19,8 @@ interface IStorageFactory { * * @param string $wrapperName * @param callable $callback + * @return true if the wrapper was added, false if there was already a wrapper with this + * name registered */ public function addStorageWrapper($wrapperName, $callback);