From 02df7827a972731bfb72fedc45f5b731e1d5aa1a Mon Sep 17 00:00:00 2001 From: Benni Mack <benni@typo3.org> Date: Mon, 4 Jun 2018 08:48:01 +0200 Subject: [PATCH] [BUGFIX] Avoid fatal error in scheduler The scheduler object cleans up execution arrays on instantiation. Due to the PSR-3 refactoring, the logger is instantiated after the constructor is called - resulting in a fatal error ("Call to member function info() on null") when cleaning up the execution array. The patch manually instantiates a logger if there isn't one already. Resolves: #85148 Releases: master Change-Id: I5ff3a06a2b9d7e511d5d243df545359a48bf84b1 Reviewed-on: https://review.typo3.org/57118 Tested-by: TYPO3com <no-reply@typo3.com> Reviewed-by: Oliver Klee <typo3-coding@oliverklee.de> Reviewed-by: Joerg Boesche <typo3@joergboesche.de> Reviewed-by: Daniel Gorges <daniel.gorges@b13.de> Tested-by: Daniel Gorges <daniel.gorges@b13.de> Reviewed-by: Steffen Frese <steffenf14@gmail.com> Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl> Tested-by: Wouter Wolters <typo3@wouterwolters.nl> --- typo3/sysext/scheduler/Classes/Scheduler.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/typo3/sysext/scheduler/Classes/Scheduler.php b/typo3/sysext/scheduler/Classes/Scheduler.php index 4bc03bd58019..d8d8f2c649b0 100644 --- a/typo3/sysext/scheduler/Classes/Scheduler.php +++ b/typo3/sysext/scheduler/Classes/Scheduler.php @@ -16,10 +16,12 @@ namespace TYPO3\CMS\Scheduler; use Psr\Log\LoggerAwareInterface; use Psr\Log\LoggerAwareTrait; +use Psr\Log\LoggerInterface; use TYPO3\CMS\Core\Configuration\ExtensionConfiguration; use TYPO3\CMS\Core\Database\Connection; use TYPO3\CMS\Core\Database\ConnectionPool; use TYPO3\CMS\Core\Database\Query\QueryHelper; +use TYPO3\CMS\Core\Log\LogManager; use TYPO3\CMS\Core\Registry; use TYPO3\CMS\Core\SingletonInterface; use TYPO3\CMS\Core\Utility\GeneralUtility; @@ -447,6 +449,11 @@ class Scheduler implements SingletonInterface, LoggerAwareInterface */ public function log($message, $status = 0, $code = '') { + // this method could be called from the constructor (via "cleanExecutionArrays") and no logger is instantiated + // by then, that's why check if the logger is available + if (!($this->logger instanceof LoggerInterface)) { + $this->setLogger(GeneralUtility::makeInstance(LogManager::class)->getLogger(__CLASS__)); + } $message = trim('[scheduler]: ' . $code) . ' - ' . $message; switch ((int)$status) { // error (user problem) -- GitLab