From cbb34af53f0e6a85375ef9223a9dd74b9ba646ce Mon Sep 17 00:00:00 2001
From: Christoph Wurst <christoph@winzerhof-wurst.at>
Date: Thu, 26 Nov 2020 16:44:20 +0100
Subject: [PATCH] Do not update incompatible apps

Previously there was no (platform) dependency check for an app that was
installed before. So Nextcloud happily upgraded an app that now requires
a php version newer than the current one. Which means in the lucky case
you see a failing upgrade due to the language incompatibility, or in the
unlucky case you see unexpected errors later in production.

Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
---
 lib/private/Updater.php       | 2 +-
 lib/private/legacy/OC_App.php | 9 +++++++++
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/lib/private/Updater.php b/lib/private/Updater.php
index 437ba38362c..b9b72dd7fa4 100644
--- a/lib/private/Updater.php
+++ b/lib/private/Updater.php
@@ -360,7 +360,7 @@ class Updater extends BasicEmitter {
 		$disabledApps = [];
 		$appManager = \OC::$server->getAppManager();
 		foreach ($apps as $app) {
-			// check if the app is compatible with this version of ownCloud
+			// check if the app is compatible with this version of Nextcloud
 			$info = OC_App::getAppInfo($app);
 			if ($info === null || !OC_App::isAppCompatible($version, $info)) {
 				if ($appManager->isShipped($app)) {
diff --git a/lib/private/legacy/OC_App.php b/lib/private/legacy/OC_App.php
index 0b9ae8c8c53..fdbbb1be907 100644
--- a/lib/private/legacy/OC_App.php
+++ b/lib/private/legacy/OC_App.php
@@ -974,6 +974,15 @@ class OC_App {
 		\OC::$server->getAppManager()->clearAppsCache();
 		$appData = self::getAppInfo($appId);
 
+		$ignoreMaxApps = \OC::$server->getConfig()->getSystemValue('app_install_overwrite', []);
+		$ignoreMax = in_array($appId, $ignoreMaxApps, true);
+		\OC_App::checkAppDependencies(
+			\OC::$server->getConfig(),
+			\OC::$server->getL10N('core'),
+			$appData,
+			$ignoreMax
+		);
+
 		self::registerAutoloading($appId, $appPath, true);
 		self::executeRepairSteps($appId, $appData['repair-steps']['pre-migration']);
 
-- 
GitLab