Skip to content
Snippets Groups Projects
Commit 8edc8241 authored by Oliver Bartsch's avatar Oliver Bartsch Committed by Daniel Goerz
Browse files

[BUGFIX] Check parsed url for query part in BE Shortcuts

This change adds null coalescing operators at multiple places
in `ShortcutRepository` to avoid type errors if the shortcut url
doesn't contain a query part (e.g. coming from legacy URLs
when a TYPO3 v7 installation was migrated).

Resolves: #89533
Releases: master, 9.5
Change-Id: I9bd1bdf0cf2f8d8954c4bf9eada6c720f2103af1
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/62178


Tested-by: default avatarTYPO3com <noreply@typo3.com>
Tested-by: default avatarBenni Mack <benni@typo3.org>
Tested-by: default avatarDaniel Goerz <daniel.goerz@posteo.de>
Reviewed-by: default avatarBenni Mack <benni@typo3.org>
Reviewed-by: default avatarDaniel Goerz <daniel.goerz@posteo.de>
parent b5431379
Branches
Tags
No related merge requests found
......@@ -197,7 +197,7 @@ class ShortcutRepository
$queryParts = parse_url($url);
$queryParameters = [];
parse_str($queryParts['query'], $queryParameters);
parse_str($queryParts['query'] ?? '', $queryParameters);
if (!empty($queryParameters['scheme'])) {
throw new \RuntimeException('Shortcut URLs must be relative', 1518785877);
......@@ -489,7 +489,7 @@ class ShortcutRepository
$queryParts = parse_url($row['url']);
// Explode GET vars recursively
$queryParameters = [];
parse_str($queryParts['query'], $queryParameters);
parse_str($queryParts['query'] ?? '', $queryParameters);
if ($row['module_name'] === 'xMOD_alt_doc.php' && is_array($queryParameters['edit'])) {
$shortcut['table'] = key($queryParameters['edit']);
......@@ -733,16 +733,16 @@ class ShortcutRepository
{
$parsedUrl = parse_url($url);
$parameters = [];
parse_str($parsedUrl['query'], $parameters);
parse_str($parsedUrl['query'] ?? '', $parameters);
$uriBuilder = GeneralUtility::makeInstance(UriBuilder::class);
// parse the returnUrl and replace the module token of it
if (!empty($parameters['returnUrl'])) {
$parsedReturnUrl = parse_url($parameters['returnUrl']);
$returnUrlParameters = [];
parse_str($parsedReturnUrl['query'], $returnUrlParameters);
parse_str($parsedReturnUrl['query'] ?? '', $returnUrlParameters);
if (strpos($parsedReturnUrl['path'], 'index.php') !== false && !empty($returnUrlParameters['route'])) {
if (strpos($parsedReturnUrl['path'] ?? '', 'index.php') !== false && !empty($returnUrlParameters['route'])) {
$module = $returnUrlParameters['route'];
$parameters['returnUrl'] = (string)$uriBuilder->buildUriFromRoutePath($module, $returnUrlParameters);
$url = $parsedUrl['path'] . '?' . http_build_query($parameters, '', '&', PHP_QUERY_RFC3986);
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment