From a0a957c9619c2df142d4eab1df35b1f69008f23b Mon Sep 17 00:00:00 2001 From: Côme Chilliet Date: Mon, 18 Mar 2024 11:56:04 +0100 Subject: fix(setupcheck): Catch Throwables from setup checks and show them to the admin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This avoids letting a buggy setup check from an application crash the setupcheck system. The throwable is shown instead. Signed-off-by: Côme Chilliet --- lib/private/SetupCheck/SetupCheckManager.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'lib/private/SetupCheck') diff --git a/lib/private/SetupCheck/SetupCheckManager.php b/lib/private/SetupCheck/SetupCheckManager.php index b8b6cfa11e7..fbf57d81fd3 100644 --- a/lib/private/SetupCheck/SetupCheckManager.php +++ b/lib/private/SetupCheck/SetupCheckManager.php @@ -30,6 +30,7 @@ use OC\AppFramework\Bootstrap\Coordinator; use OCP\Server; use OCP\SetupCheck\ISetupCheck; use OCP\SetupCheck\ISetupCheckManager; +use OCP\SetupCheck\SetupResult; use Psr\Log\LoggerInterface; class SetupCheckManager implements ISetupCheckManager { @@ -46,7 +47,11 @@ class SetupCheckManager implements ISetupCheckManager { /** @var ISetupCheck $setupCheckObject */ $setupCheckObject = Server::get($setupCheck->getService()); $this->logger->debug('Running check '.get_class($setupCheckObject)); - $setupResult = $setupCheckObject->run(); + try { + $setupResult = $setupCheckObject->run(); + } catch (\Throwable $t) { + $setupResult = SetupResult::error("An exception occured while running the setup check:\n$t"); + } $setupResult->setName($setupCheckObject->getName()); $category = $setupCheckObject->getCategory(); $results[$category] ??= []; -- cgit v1.2.3