diff options
Diffstat (limited to 'lib/private/updater.php')
-rw-r--r-- | lib/private/updater.php | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/lib/private/updater.php b/lib/private/updater.php index 1d52f9be374..a2aa8bf33e9 100644 --- a/lib/private/updater.php +++ b/lib/private/updater.php @@ -146,15 +146,37 @@ class Updater extends BasicEmitter { } /** + * Whether an upgrade to a specified version is possible + * @param string $oldVersion + * @param string $newVersion + * @return bool + */ + public function isUpgradePossible($oldVersion, $newVersion) { + $oldVersion = explode('.', $oldVersion); + $newVersion = explode('.', $newVersion); + + if($newVersion[0] > ($oldVersion[0] + 1) || $oldVersion[0] > $newVersion[0]) { + return false; + } + return true; + } + + /** * runs the update actions in maintenance mode, does not upgrade the source files * except the main .htaccess file * * @param string $currentVersion current version to upgrade to * @param string $installedVersion previous version from which to upgrade from * + * @throws \Exception * @return bool true if the operation succeeded, false otherwise */ private function doUpgrade($currentVersion, $installedVersion) { + // Stop update if the update is over several major versions + if (!self::isUpgradePossible($installedVersion, $currentVersion)) { + throw new \Exception('Updates between multiple major versions are unsupported.'); + } + // Update htaccess files for apache hosts if (isset($_SERVER['SERVER_SOFTWARE']) && strstr($_SERVER['SERVER_SOFTWARE'], 'Apache')) { \OC_Setup::updateHtaccess(); @@ -235,7 +257,7 @@ class Updater extends BasicEmitter { } /** - * @param string $version the oc version to check app compatibilty with + * @param string $version the oc version to check app compatibility with */ protected function checkAppUpgrade($version) { $apps = \OC_App::getEnabledApps(); |