From c967c9977f9014114e8ebc0f122d04b3aabb4784 Mon Sep 17 00:00:00 2001
From: Nicole Cordes <typo3@cordes.co>
Date: Mon, 17 Dec 2018 14:47:41 +0100
Subject: [PATCH] [BUGFIX] Catch error in database Upgrade Wizard

If an extension provides wrong SQL in ext_tables.sql, the upgrade
wizard is skipped completely. This patch catches the current
exception and outputs the error that needs to be resolved manually.

Resolves: #87187
Releases: master, 9.5
Change-Id: I903ce7fdc9373eee66da7bed86698c42a2731dc7
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/59182
Reviewed-by: Benni Mack <benni@typo3.org>
Reviewed-by: Markus Klein <markus.klein@typo3.org>
Reviewed-by: Susanne Moog <look@susi.dev>
Tested-by: TYPO3com <noreply@typo3.com>
Tested-by: Benni Mack <benni@typo3.org>
Tested-by: Susanne Moog <look@susi.dev>
---
 .../install/Classes/Controller/UpgradeController.php | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/typo3/sysext/install/Classes/Controller/UpgradeController.php b/typo3/sysext/install/Classes/Controller/UpgradeController.php
index 17bdbfd077ef..6e9b66e008d2 100644
--- a/typo3/sysext/install/Classes/Controller/UpgradeController.php
+++ b/typo3/sysext/install/Classes/Controller/UpgradeController.php
@@ -24,6 +24,7 @@ use Symfony\Component\Finder\Finder;
 use Symfony\Component\Finder\SplFileInfo;
 use TYPO3\CMS\Core\Core\Environment;
 use TYPO3\CMS\Core\Database\ConnectionPool;
+use TYPO3\CMS\Core\Database\Schema\Exception\StatementException;
 use TYPO3\CMS\Core\FormProtection\FormProtectionFactory;
 use TYPO3\CMS\Core\FormProtection\InstallToolFormProtection;
 use TYPO3\CMS\Core\Http\JsonResponse;
@@ -940,10 +941,15 @@ class UpgradeController extends AbstractController
         // ext_localconf, db and ext_tables must be loaded for the updates :(
         $this->loadExtLocalconfDatabaseAndExtTables(false);
         $upgradeWizardsService = new UpgradeWizardsService();
-        $adds = $upgradeWizardsService->getBlockingDatabaseAdds();
-        $this->resetGlobalContainer();
+        $adds = [];
         $needsUpdate = false;
-        if (!empty($adds)) {
+        try {
+            $adds = $upgradeWizardsService->getBlockingDatabaseAdds();
+            $this->resetGlobalContainer();
+            if (!empty($adds)) {
+                $needsUpdate = true;
+            }
+        } catch (StatementException $exception) {
             $needsUpdate = true;
         }
         return new JsonResponse([
-- 
GitLab