Skip to content

Commit f551bbe

Browse files
authored
[6.0] Fix incorrect language tag comparison (#45947)
* Fix incorrect language tag comparison * Fix Tainted detection
1 parent 2415153 commit f551bbe

File tree

2 files changed

+15
-5
lines changed

2 files changed

+15
-5
lines changed

plugins/system/languagefilter/src/Extension/LanguageFilter.php

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -373,13 +373,13 @@ public function parseRule(&$router, &$uri)
373373
} elseif ($this->params->get('remove_default_prefix', 0)) {
374374
// We don't have a prefix for the default language
375375
$uri->setVar('lang', $this->default_lang);
376-
} else {
376+
} elseif (!isset($this->sefs[$lang])) {
377377
// No language is set, so we want to redirect to the right language
378378
$router->setTainted();
379379
}
380380

381381
// The language was set both per SEF path and per query parameter. Query parameter takes precedence
382-
if ($lang) {
382+
if ($lang && isset($this->sefs[$sef])) {
383383
$uri->setVar('lang', $lang);
384384
$router->setTainted();
385385
}
@@ -422,8 +422,18 @@ public function setLanguageApplicationState(&$router, &$uri)
422422

423423
// Our parse rule discovered a language
424424
if ($uri->hasVar('lang')) {
425-
$lang_code = $uri->getVar('lang');
426-
} else {
425+
$uri_lang_code = $uri->getVar('lang');
426+
427+
// Check whether the tag exists, first check for full language tag, then for short tag
428+
if (isset($this->lang_codes[$uri_lang_code])) {
429+
$lang_code = $uri_lang_code;
430+
} elseif (isset($this->sefs[$uri_lang_code])) {
431+
// Check for short language tag
432+
$lang_code = $this->sefs[$uri_lang_code]->lang_code;
433+
}
434+
}
435+
436+
if (!$lang_code) {
427437
/**
428438
* We don't know the language yet and want to discover it.
429439
* If we remove the default prefix, call by POST or have nolangfilter set,

plugins/system/sef/src/Extension/Sef.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ public function onAfterRoute(AfterRouteEvent $event)
119119
if ($router->isTainted()) {
120120
$parsedVars = $router->getVars();
121121

122-
if ($app->getLanguageFilter()) {
122+
if ($app->getLanguageFilter() && isset($parsedVars['language'])) {
123123
$parsedVars['lang'] = $parsedVars['language'];
124124
unset($parsedVars['language']);
125125
}

0 commit comments

Comments
 (0)