From ea20ffd58058bc4fce3e547ab30a7d7903369306 Mon Sep 17 00:00:00 2001 From: Fedik Date: Wed, 20 Aug 2025 17:36:29 +0300 Subject: [PATCH 1/5] Fix incorrect language tag comparison --- .../languagefilter/src/Extension/LanguageFilter.php | 10 ++++++++-- plugins/system/sef/src/Extension/Sef.php | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/plugins/system/languagefilter/src/Extension/LanguageFilter.php b/plugins/system/languagefilter/src/Extension/LanguageFilter.php index c9eae9f627375..a31b46946406c 100644 --- a/plugins/system/languagefilter/src/Extension/LanguageFilter.php +++ b/plugins/system/languagefilter/src/Extension/LanguageFilter.php @@ -425,8 +425,14 @@ public function setLanguageApplicationState(&$router, &$uri) // Our parse rule discovered a language if ($uri->hasVar('lang')) { - $lang_code = $uri->getVar('lang'); - } else { + $uri_lang_code = $uri->getVar('lang'); + + if (isset($this->sefs[$uri_lang_code])) { + $lang_code = $this->sefs[$uri_lang_code]->lang_code; + } + } + + if (!$lang_code) { /** * We don't know the language yet and want to discover it. * If we remove the default prefix, call by POST or have nolangfilter set, diff --git a/plugins/system/sef/src/Extension/Sef.php b/plugins/system/sef/src/Extension/Sef.php index 5f8ae8b5826b3..65d990a507298 100644 --- a/plugins/system/sef/src/Extension/Sef.php +++ b/plugins/system/sef/src/Extension/Sef.php @@ -119,7 +119,7 @@ public function onAfterRoute(AfterRouteEvent $event) if ($router->isTainted()) { $parsedVars = $router->getVars(); - if ($app->getLanguageFilter()) { + if ($app->getLanguageFilter() && isset($parsedVars['language'])) { $parsedVars['lang'] = $parsedVars['language']; unset($parsedVars['language']); } From 3532c0aa884f8a8644306997b59aea0c68eeaba9 Mon Sep 17 00:00:00 2001 From: Fedik Date: Wed, 20 Aug 2025 17:47:58 +0300 Subject: [PATCH 2/5] Fix incorrect language tag comparison --- .../system/languagefilter/src/Extension/LanguageFilter.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/plugins/system/languagefilter/src/Extension/LanguageFilter.php b/plugins/system/languagefilter/src/Extension/LanguageFilter.php index a31b46946406c..db52cb163ff48 100644 --- a/plugins/system/languagefilter/src/Extension/LanguageFilter.php +++ b/plugins/system/languagefilter/src/Extension/LanguageFilter.php @@ -427,8 +427,13 @@ public function setLanguageApplicationState(&$router, &$uri) if ($uri->hasVar('lang')) { $uri_lang_code = $uri->getVar('lang'); - if (isset($this->sefs[$uri_lang_code])) { + // Check whether the tag exists + if (isset($this->lang_codes[$uri_lang_code])) { + $lang_code = $uri_lang_code; + } elseif (isset($this->sefs[$uri_lang_code])) { + // Check for short language tag $lang_code = $this->sefs[$uri_lang_code]->lang_code; + $uri->setVar('lang', $lang_code); } } From 89b46af129f307b9bc298ef126b3cc7ab99e684a Mon Sep 17 00:00:00 2001 From: Fedik Date: Wed, 20 Aug 2025 17:48:47 +0300 Subject: [PATCH 3/5] Fix incorrect language tag comparison --- plugins/system/languagefilter/src/Extension/LanguageFilter.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/system/languagefilter/src/Extension/LanguageFilter.php b/plugins/system/languagefilter/src/Extension/LanguageFilter.php index db52cb163ff48..1d548e3f5ade0 100644 --- a/plugins/system/languagefilter/src/Extension/LanguageFilter.php +++ b/plugins/system/languagefilter/src/Extension/LanguageFilter.php @@ -427,7 +427,7 @@ public function setLanguageApplicationState(&$router, &$uri) if ($uri->hasVar('lang')) { $uri_lang_code = $uri->getVar('lang'); - // Check whether the tag exists + // Check whether the tag exists, first check for full language tag, then for short tag if (isset($this->lang_codes[$uri_lang_code])) { $lang_code = $uri_lang_code; } elseif (isset($this->sefs[$uri_lang_code])) { From cde212451f43ebc5d3790b48f9a32fdbf0dc30b2 Mon Sep 17 00:00:00 2001 From: Fedik Date: Thu, 21 Aug 2025 10:08:55 +0300 Subject: [PATCH 4/5] Fix incorrect language tag comparison --- plugins/system/languagefilter/src/Extension/LanguageFilter.php | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/system/languagefilter/src/Extension/LanguageFilter.php b/plugins/system/languagefilter/src/Extension/LanguageFilter.php index 1d548e3f5ade0..803857c52afdb 100644 --- a/plugins/system/languagefilter/src/Extension/LanguageFilter.php +++ b/plugins/system/languagefilter/src/Extension/LanguageFilter.php @@ -433,7 +433,6 @@ public function setLanguageApplicationState(&$router, &$uri) } elseif (isset($this->sefs[$uri_lang_code])) { // Check for short language tag $lang_code = $this->sefs[$uri_lang_code]->lang_code; - $uri->setVar('lang', $lang_code); } } From 673e8f0642615f8103e18ca256ba307adc75eecd Mon Sep 17 00:00:00 2001 From: Fedik Date: Sat, 23 Aug 2025 11:15:14 +0300 Subject: [PATCH 5/5] Fix Tainted detection --- .../system/languagefilter/src/Extension/LanguageFilter.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/system/languagefilter/src/Extension/LanguageFilter.php b/plugins/system/languagefilter/src/Extension/LanguageFilter.php index 803857c52afdb..e7a62b78052f9 100644 --- a/plugins/system/languagefilter/src/Extension/LanguageFilter.php +++ b/plugins/system/languagefilter/src/Extension/LanguageFilter.php @@ -376,13 +376,13 @@ public function parseRule(&$router, &$uri) } elseif ($this->params->get('remove_default_prefix', 0)) { // We don't have a prefix for the default language $uri->setVar('lang', $this->default_lang); - } else { + } elseif (!isset($this->sefs[$lang])) { // No language is set, so we want to redirect to the right language $router->setTainted(); } // The language was set both per SEF path and per query parameter. Query parameter takes precedence - if ($lang) { + if ($lang && isset($this->sefs[$sef])) { $uri->setVar('lang', $lang); $router->setTainted(); }