From 9c108db306719d24b743b597a6977a0284b0e9cf Mon Sep 17 00:00:00 2001 From: OwnageIsMagic Date: Thu, 1 Jun 2023 15:25:13 +0300 Subject: [PATCH 1/3] Account for PredefinedCulturesOnly in CultureInfo LCID .ctor (#86878) --- .../src/System/Globalization/CultureData.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/libraries/System.Private.CoreLib/src/System/Globalization/CultureData.cs b/src/libraries/System.Private.CoreLib/src/System/Globalization/CultureData.cs index 12ea4ded8beedd..d70d535d69ae6d 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Globalization/CultureData.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Globalization/CultureData.cs @@ -868,6 +868,11 @@ internal static CultureData GetCultureData(int culture, bool bUseUserOverride) if (GlobalizationMode.Invariant) { + if (!GlobalizationMode.PredefinedCulturesOnly) + { + return Invariant; + } + // LCID is not supported in the InvariantMode throw new CultureNotFoundException(nameof(culture), culture, SR.Argument_CultureNotSupportedInInvariantMode); } From 04c3fd6dfad201bb7b9ef22a75fb63061a507b18 Mon Sep 17 00:00:00 2001 From: OwnageIsMagic Date: Fri, 2 Jun 2023 04:33:14 +0300 Subject: [PATCH 2/3] add test case --- .../tests/Invariant/InvariantMode.cs | 10 ++++++++++ .../src/System/Globalization/CultureData.cs | 5 +++++ 2 files changed, 15 insertions(+) diff --git a/src/libraries/System.Globalization/tests/Invariant/InvariantMode.cs b/src/libraries/System.Globalization/tests/Invariant/InvariantMode.cs index 361c39ec4272b8..5dcb5f4ecfde22 100644 --- a/src/libraries/System.Globalization/tests/Invariant/InvariantMode.cs +++ b/src/libraries/System.Globalization/tests/Invariant/InvariantMode.cs @@ -1196,6 +1196,16 @@ public void TestGetCultureInfo_PredefinedOnly_ReturnsSame() Assert.Equal(CultureInfo.GetCultureInfo("en-US"), CultureInfo.GetCultureInfo("en-US", predefinedOnly: true)); } + [ConditionalFact(nameof(PredefinedCulturesOnlyIsDisabled))] + [InlineData(0x0001)] + [InlineData(0x7c5C)] + [InlineData(0x03_0404)] // with sort id + [InlineData(0x007F)] // LOCALE_INVARIANT + public void TestCultureInfo_Ctor_Int32_ReturnsInvariant(int culture) + { + Assert.Equal(new CultureInfo(culture), CultureInfo.InvariantCulture); + } + private static byte[] GetExpectedInvariantOrdinalSortKey(ReadOnlySpan input) { MemoryStream memoryStream = new MemoryStream(); diff --git a/src/libraries/System.Private.CoreLib/src/System/Globalization/CultureData.cs b/src/libraries/System.Private.CoreLib/src/System/Globalization/CultureData.cs index d70d535d69ae6d..8d3b1d6caedd08 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Globalization/CultureData.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Globalization/CultureData.cs @@ -870,6 +870,11 @@ internal static CultureData GetCultureData(int culture, bool bUseUserOverride) { if (!GlobalizationMode.PredefinedCulturesOnly) { + if (culture is < 1 or > 0xf_ffff) + { + throw new CultureNotFoundException(nameof(culture), culture, SR.Argument_CultureNotSupported); + } + return Invariant; } From d63dfc215cc4ff0a7e4d6d38a592c6efa6634295 Mon Sep 17 00:00:00 2001 From: OwnageIsMagic Date: Fri, 2 Jun 2023 17:38:28 +0300 Subject: [PATCH 3/3] fix test --- .../System.Globalization/tests/Invariant/InvariantMode.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libraries/System.Globalization/tests/Invariant/InvariantMode.cs b/src/libraries/System.Globalization/tests/Invariant/InvariantMode.cs index 5dcb5f4ecfde22..fd2d62a59934b6 100644 --- a/src/libraries/System.Globalization/tests/Invariant/InvariantMode.cs +++ b/src/libraries/System.Globalization/tests/Invariant/InvariantMode.cs @@ -1196,7 +1196,7 @@ public void TestGetCultureInfo_PredefinedOnly_ReturnsSame() Assert.Equal(CultureInfo.GetCultureInfo("en-US"), CultureInfo.GetCultureInfo("en-US", predefinedOnly: true)); } - [ConditionalFact(nameof(PredefinedCulturesOnlyIsDisabled))] + [ConditionalTheory(nameof(PredefinedCulturesOnlyIsDisabled))] [InlineData(0x0001)] [InlineData(0x7c5C)] [InlineData(0x03_0404)] // with sort id