From 71440487f772fa8404fb5ac894914d487ff40c27 Mon Sep 17 00:00:00 2001 From: Benni Mack <benni@typo3.org> Date: Mon, 11 May 2020 21:45:15 +0200 Subject: [PATCH] [BUGFIX] Fix internal + external links with URLs fragment Internal and external links have been incorrectly processed by the legacy link notation converter which removed the fragment from the URL before checking whether the link is actually a legacy (file) link. The change is now narrowed down to only append the fragment to file links. Resolves: #90916 Resolves: #91357 Related: #75213 Releases: master, 9.5 Change-Id: Ibdbfae4ac2ca0caa6710fb944810336e875e8929 Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/64411 Reviewed-by: Benjamin Franzke <bfr@qbus.de> Reviewed-by: Benni Mack <benni@typo3.org> Tested-by: TYPO3com <noreply@typo3.com> Tested-by: Benni Mack <benni@typo3.org> --- .../LinkHandling/LegacyLinkNotationConverter.php | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/typo3/sysext/core/Classes/LinkHandling/LegacyLinkNotationConverter.php b/typo3/sysext/core/Classes/LinkHandling/LegacyLinkNotationConverter.php index 9bb4a541622a..9bf76ab24e8d 100644 --- a/typo3/sysext/core/Classes/LinkHandling/LegacyLinkNotationConverter.php +++ b/typo3/sysext/core/Classes/LinkHandling/LegacyLinkNotationConverter.php @@ -200,18 +200,26 @@ class LegacyLinkNotationConverter protected function getFileOrFolderObjectFromMixedIdentifier(string $mixedIdentifier): array { $result = []; - if (strpos($mixedIdentifier, '#') !== false) { - [$mixedIdentifier, $result['fragment']] = explode('#', $mixedIdentifier, 2); - } try { - $fileOrFolderObject = $this->getResourceFactory()->retrieveFileOrFolderObject($mixedIdentifier); + $fileIdentifier = $mixedIdentifier; + $fragment = null; + if (strpos($fileIdentifier, '#') !== false) { + [$fileIdentifier, $fragment] = explode('#', $fileIdentifier, 2); + } + $fileOrFolderObject = $this->getResourceFactory()->retrieveFileOrFolderObject($fileIdentifier); // Link to a folder or file if ($fileOrFolderObject instanceof File) { $result['type'] = LinkService::TYPE_FILE; $result['file'] = $fileOrFolderObject; + if ($fragment) { + $result['fragment'] = $fragment; + } } elseif ($fileOrFolderObject instanceof Folder) { $result['type'] = LinkService::TYPE_FOLDER; $result['folder'] = $fileOrFolderObject; + if ($fragment) { + $result['fragment'] = $fragment; + } } else { $result['type'] = LinkService::TYPE_UNKNOWN; $result['file'] = $mixedIdentifier; -- GitLab