diff options
author | Vincent Petry <pvince81@owncloud.com> | 2015-01-27 16:55:59 +0100 |
---|---|---|
committer | Vincent Petry <pvince81@owncloud.com> | 2015-01-27 17:40:08 +0100 |
commit | 6d8985b67109b2b5d9dc64a4fcd5ed6d748bb338 (patch) | |
tree | e6da08fc0f11775b989dfa72b9dd5ee3db62c382 /lib/private/files/mount | |
parent | 3478634df1ce2b7717bfe211425f59c4107688f8 (diff) | |
download | nextcloud-server-6d8985b67109b2b5d9dc64a4fcd5ed6d748bb338.tar.gz nextcloud-server-6d8985b67109b2b5d9dc64a4fcd5ed6d748bb338.zip |
Prevent wrapping null storage
Can happen when trying to instantiate external storages that have
incomplete config, where the constructor throws an exception (the
exception is caught in createStorage())
Diffstat (limited to 'lib/private/files/mount')
-rw-r--r-- | lib/private/files/mount/mountpoint.php | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/lib/private/files/mount/mountpoint.php b/lib/private/files/mount/mountpoint.php index 77a51a17020..85edb7cb570 100644 --- a/lib/private/files/mount/mountpoint.php +++ b/lib/private/files/mount/mountpoint.php @@ -42,6 +42,14 @@ class MountPoint implements IMountPoint { private $loader; /** + * Specified whether the storage is invalid after failing to + * instantiate it. + * + * @var bool + */ + private $invalidStorage = false; + + /** * @param string|\OC\Files\Storage\Storage $storage * @param string $mountpoint * @param array $arguments (optional) configuration for the storage backend @@ -99,10 +107,15 @@ class MountPoint implements IMountPoint { * @return \OC\Files\Storage\Storage */ private function createStorage() { + if ($this->invalidStorage) { + return null; + } + if (class_exists($this->class)) { try { return $this->loader->getInstance($this->mountPoint, $this->class, $this->arguments); } catch (\Exception $exception) { + $this->invalidStorage = true; if ($this->mountPoint === '/') { // the root storage could not be initialized, show the user! throw new \Exception('The root storage could not be initialized. Please contact your local administrator.', $exception->getCode(), $exception); @@ -113,6 +126,7 @@ class MountPoint implements IMountPoint { } } else { \OC_Log::write('core', 'storage backend ' . $this->class . ' not found', \OC_Log::ERROR); + $this->invalidStorage = true; return null; } } @@ -137,6 +151,7 @@ class MountPoint implements IMountPoint { if (is_null($storage)) { return null; } + $this->storage = $storage; } $this->storageId = $this->storage->getId(); @@ -177,7 +192,11 @@ class MountPoint implements IMountPoint { * @param callable $wrapper */ public function wrapStorage($wrapper) { - $this->storage = $wrapper($this->mountPoint, $this->getStorage()); + $storage = $this->getStorage(); + // storage can be null if it couldn't be initialized + if ($storage != null) { + $this->storage = $wrapper($this->mountPoint, $storage); + } } /** |