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