From b1e7db956e1c292bda210f43e0ea56549061f58a Mon Sep 17 00:00:00 2001 From: linawolf <112@linawolf.de> Date: Thu, 19 Jan 2023 10:18:01 +0000 Subject: [PATCH] [BUGFIX] Prevent PHP fatal error in scheduler One place has been overseen, when stabilizing deserialization in scheduler. The automatic cleaning of stuck executions now also uses the TaskSerializer to catch potential InvalidTaskExceptions. The info log message contains dummy values in such a case. Resolves: #99605 Related: #92466 Releases: main, 11.5 Change-Id: Id100991dbba61d7761987f0a0bdd04415ad86891 Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/77437 Tested-by: Nikita Hovratov <nikita.h@live.de> Tested-by: core-ci <typo3@b13.com> Reviewed-by: Nikita Hovratov <nikita.h@live.de> --- typo3/sysext/scheduler/Classes/Scheduler.php | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/typo3/sysext/scheduler/Classes/Scheduler.php b/typo3/sysext/scheduler/Classes/Scheduler.php index 7b00074a086b..1afa55349a01 100644 --- a/typo3/sysext/scheduler/Classes/Scheduler.php +++ b/typo3/sysext/scheduler/Classes/Scheduler.php @@ -122,8 +122,15 @@ class Scheduler implements SingletonInterface if ($tstamp - $task < $maxDuration) { $executions[] = $task; } else { - $task = unserialize($row['serialized_task_object']); - $this->log('Removing logged execution, assuming that the process is dead. Execution of \'' . get_class($task) . '\' (UID: ' . $row['uid'] . ') was started at ' . date('Y-m-d H:i:s', $task->getExecutionTime())); + $schedulerTask = unserialize($row['serialized_task_object']); + if ($schedulerTask instanceof AbstractTask) { + $taskClass = get_class($schedulerTask); + $taskTime = date('Y-m-d H:i:s', $schedulerTask->getExecutionTime()); + } else { + $taskClass = 'unknown task'; + $taskTime = 'unknown time'; + } + $this->log('Removing logged execution, assuming that the process is dead. Execution of \'' . $taskClass . '\' (UID: ' . $row['uid'] . ') was started at ' . $taskTime); } } } -- GitLab