From a89ced8eacd3b29e27c00609f34bf57040de09c9 Mon Sep 17 00:00:00 2001 From: bahram Date: Sat, 13 Feb 2021 22:42:31 +0330 Subject: [PATCH] [Intl] fix Locale::getFallback() throwing exception on long $locale --- src/Symfony/Component/Intl/Locale.php | 3 ++- src/Symfony/Component/Intl/Tests/LocaleTest.php | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Intl/Locale.php b/src/Symfony/Component/Intl/Locale.php index 0373844e76c5..3d07e42b13ba 100644 --- a/src/Symfony/Component/Intl/Locale.php +++ b/src/Symfony/Component/Intl/Locale.php @@ -68,7 +68,8 @@ public static function getDefaultFallback(): ?string public static function getFallback(string $locale): ?string { if (\function_exists('locale_parse')) { - $localeSubTags = locale_parse($locale); + $localeSubTags = locale_parse($locale) ?? ['language' => $locale]; + if (1 === \count($localeSubTags)) { if ('root' !== self::$defaultFallback && self::$defaultFallback === $localeSubTags['language']) { return 'root'; diff --git a/src/Symfony/Component/Intl/Tests/LocaleTest.php b/src/Symfony/Component/Intl/Tests/LocaleTest.php index fd998612a7ea..fce214242a47 100644 --- a/src/Symfony/Component/Intl/Tests/LocaleTest.php +++ b/src/Symfony/Component/Intl/Tests/LocaleTest.php @@ -70,4 +70,16 @@ public function testDefaultRootFallback() Locale::setDefaultFallback($prev); } + + /** + * @requires function locale_parse + */ + public function testLongLocaleFallback() + { + $locale = 'LC_TYPE=fr_FR.UTF-8;LC_NUMERIC=C;LC_TIME=fr_FR.UTF-8;LC_COLLATE=fr_FR.UTF-8;'. + 'LC_MONETARY=fr_FR.UTF-8;LC_MESSAGES=fr_FR.UTF-8;LC_PAPER=fr_FR.UTF-8;LC_NAME=fr_FR.UTF-8;'. + 'LC_ADDRESS=fr_FR.UTF-8;LC_TELEPHONE=fr_FR.UTF-8;LC_MEASUREMENT=fr_FR.UTF-8;LC_IDENTIFICATION=fr_FR.UTF-8'; + + $this->assertNull(Locale::getFallback($locale)); + } }