Background jobs are tolerant of stale entries left by disabled apps, which will cause an autoload exception.tags/v8.2beta1
@@ -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); | |||
} | |||
/** |
@@ -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; | |||
} | |||
/** |
@@ -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); | |||
} | |||
} | |||