aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin McCorkell <rmccorkell@owncloud.com>2015-09-05 16:50:02 +0100
committerRobin McCorkell <rmccorkell@owncloud.com>2015-09-05 16:50:02 +0100
commit0fac2e3f3aaaeaddf431f7877ebddb6372a00a42 (patch)
treea940bf4d733550b3829a213abd311de627683917
parent895e6337325f4a107aeb834268bbcc0205ecb308 (diff)
downloadnextcloud-server-0fac2e3f3aaaeaddf431f7877ebddb6372a00a42.tar.gz
nextcloud-server-0fac2e3f3aaaeaddf431f7877ebddb6372a00a42.zip
Unique exception for invalid autoload paths, better handling
Background jobs are tolerant of stale entries left by disabled apps, which will cause an autoload exception.
-rw-r--r--lib/autoloader.php4
-rw-r--r--lib/private/backgroundjob/joblist.php22
-rw-r--r--lib/public/autoloadnotallowedexception.php36
3 files changed, 53 insertions, 9 deletions
diff --git a/lib/autoloader.php b/lib/autoloader.php
index dd09c3b9cb5..41a040b3f54 100644
--- a/lib/autoloader.php
+++ b/lib/autoloader.php
@@ -27,6 +27,8 @@
namespace OC;
+use \OCP\AutoloadNotAllowedException;
+
class Autoloader {
private $useGlobalClassPath = true;
@@ -129,7 +131,7 @@ class Autoloader {
return true;
}
}
- throw new \Exception('Path not allowed: '. $fullPath);
+ throw new AutoloadNotAllowedException($fullPath);
}
/**
diff --git a/lib/private/backgroundjob/joblist.php b/lib/private/backgroundjob/joblist.php
index f297bccbc7d..deadadfb77e 100644
--- a/lib/private/backgroundjob/joblist.php
+++ b/lib/private/backgroundjob/joblist.php
@@ -26,6 +26,7 @@
namespace OC\BackgroundJob;
use OCP\BackgroundJob\IJobList;
+use OCP\AutoloadNotAllowedException;
class JobList implements IJobList {
/**
@@ -185,15 +186,20 @@ class JobList implements IJobList {
/**
* @var Job $job
*/
- if (!class_exists($class)) {
- // job from disabled app or old version of an app, no need to do anything
- return null;
+ try {
+ if (!class_exists($class)) {
+ // job from disabled app or old version of an app, no need to do anything
+ return null;
+ }
+ $job = new $class();
+ $job->setId($row['id']);
+ $job->setLastRun($row['last_run']);
+ $job->setArgument(json_decode($row['argument'], true));
+ return $job;
+ } catch (AutoloadNotAllowedException $e) {
+ // job is from a disabled app, ignore
}
- $job = new $class();
- $job->setId($row['id']);
- $job->setLastRun($row['last_run']);
- $job->setArgument(json_decode($row['argument'], true));
- return $job;
+ return null;
}
/**
diff --git a/lib/public/autoloadnotallowedexception.php b/lib/public/autoloadnotallowedexception.php
new file mode 100644
index 00000000000..edb7121c065
--- /dev/null
+++ b/lib/public/autoloadnotallowedexception.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * @author Robin McCorkell <rmccorkell@owncloud.com>
+ *
+ * @copyright Copyright (c) 2015, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ */
+
+namespace OCP;
+
+/**
+ * Exception for when a not allowed path is attempted to be autoloaded
+ * @since 8.2.0
+ */
+class AutoloadNotAllowedException extends \DomainException {
+ /**
+ * @param string $path
+ * @since 8.2.0
+ */
+ public function __construct($path) {
+ parent::__construct('Autoload path not allowed: '.$path);
+ }
+}
+