From 4bc48b70f70f2336eff55f262a1df0605b2b9f7a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stefan=20B=C3=BCrk?= <stefan@buerk.tech>
Date: Tue, 7 Feb 2023 19:31:03 +0100
Subject: [PATCH] [BUGFIX] Avoid invalid array key accesses in
 ext:linkvalidator

Ensure that invalid array key accesses are properly guarded.

Resolves: #99863
Releases: main, 11.5
Change-Id: I1900eb96f4c77d11accc465aa5847af3e642afcc
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/77778
Tested-by: core-ci <typo3@b13.com>
Reviewed-by: Oliver Klee <typo3-coding@oliverklee.de>
Reviewed-by: Benni Mack <benni@typo3.org>
Tested-by: Benni Mack <benni@typo3.org>
---
 .../Classes/Linktype/ExternalLinktype.php              | 10 +++++-----
 .../Classes/Report/LinkValidatorReport.php             |  4 ++--
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/typo3/sysext/linkvalidator/Classes/Linktype/ExternalLinktype.php b/typo3/sysext/linkvalidator/Classes/Linktype/ExternalLinktype.php
index 63be2a578d13..dba7457613f1 100644
--- a/typo3/sysext/linkvalidator/Classes/Linktype/ExternalLinktype.php
+++ b/typo3/sysext/linkvalidator/Classes/Linktype/ExternalLinktype.php
@@ -256,7 +256,7 @@ class ExternalLinktype extends AbstractLinktype
     public function getErrorMessage($errorParams)
     {
         $lang = $this->getLanguageService();
-        $errorType = $errorParams['errorType'];
+        $errorType = $errorParams['errorType'] ?? '';
         switch ($errorType) {
             case self::ERROR_TYPE_HTTP_STATUS_CODE:
                 switch ($errorParams['errno'] ?? 0) {
@@ -271,7 +271,7 @@ class ExternalLinktype extends AbstractLinktype
                         break;
                     default:
                         // fall back to other error messages
-                        $message = $lang->getLL('list.report.error.httpstatuscode.' . $errorParams['errno']);
+                        $message = $lang->getLL('list.report.error.httpstatuscode.' . ($errorParams['errno'] ?? 0));
                         if (!$message) {
                             // fall back to generic error message
                             $message = sprintf($lang->getLL('list.report.externalerror'), $errorType);
@@ -299,7 +299,7 @@ class ExternalLinktype extends AbstractLinktype
             case 'loop':
                 $message = sprintf(
                     $lang->getLL('list.report.redirectloop'),
-                    $errorParams['exception'],
+                    ($errorParams['exception'] ?? ''),
                     ''
                 );
                 break;
@@ -309,11 +309,11 @@ class ExternalLinktype extends AbstractLinktype
                 break;
 
             case 'exception':
-                $message = sprintf($lang->getLL('list.report.httpexception'), $errorParams['exception']);
+                $message = sprintf($lang->getLL('list.report.httpexception'), ($errorParams['exception'] ?? ''));
                 break;
 
             default:
-                $message = sprintf($lang->getLL('list.report.otherhttpcode'), $errorType, $errorParams['exception']);
+                $message = sprintf($lang->getLL('list.report.otherhttpcode'), $errorType, ($errorParams['exception'] ?? ''));
         }
         return $message;
     }
diff --git a/typo3/sysext/linkvalidator/Classes/Report/LinkValidatorReport.php b/typo3/sysext/linkvalidator/Classes/Report/LinkValidatorReport.php
index f66d1b648411..ca909f8f1104 100644
--- a/typo3/sysext/linkvalidator/Classes/Report/LinkValidatorReport.php
+++ b/typo3/sysext/linkvalidator/Classes/Report/LinkValidatorReport.php
@@ -574,14 +574,14 @@ class LinkValidatorReport
         $variables['link_title'] = $row['link_title'];
         $variables['linktarget'] = $hookObj->getBrokenUrl($row);
         $response = $row['url_response'];
-        if ($response['valid']) {
+        if ($response['valid'] ?? false) {
             $linkMessage = '<span class="text-success">' . htmlspecialchars($languageService->getLL('list.msg.ok')) . '</span>';
         } else {
             $linkMessage = '<span class="text-danger">'
                 . nl2br(
                     // Encode for output
                     htmlspecialchars(
-                        $hookObj->getErrorMessage($response['errorParams']),
+                        $hookObj->getErrorMessage($response['errorParams'] ?? ['errorType' => 'unknown', 'exception' => 'Invalid response']),
                         ENT_QUOTES,
                         'UTF-8',
                         false
-- 
GitLab