summaryrefslogtreecommitdiffstats
path: root/lib/private/files/mount
diff options
context:
space:
mode:
authorVincent Petry <pvince81@owncloud.com>2015-01-27 16:55:59 +0100
committerVincent Petry <pvince81@owncloud.com>2015-01-27 17:40:08 +0100
commit6d8985b67109b2b5d9dc64a4fcd5ed6d748bb338 (patch)
treee6da08fc0f11775b989dfa72b9dd5ee3db62c382 /lib/private/files/mount
parent3478634df1ce2b7717bfe211425f59c4107688f8 (diff)
downloadnextcloud-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.php21
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);
+ }
}
/**