From f4ef5c8af72304f679663ba134035206baf84095 Mon Sep 17 00:00:00 2001 From: OwnageIsMagic Date: Fri, 2 Jun 2023 21:53:36 +0300 Subject: [PATCH] Account for PredefinedCulturesOnly in CultureInfo LCID .ctor (#87002) --- .../tests/Invariant/InvariantMode.cs | 10 ++++++++++ .../src/System/Globalization/CultureData.cs | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/libraries/System.Globalization/tests/Invariant/InvariantMode.cs b/src/libraries/System.Globalization/tests/Invariant/InvariantMode.cs index 361c39ec4272b..fd2d62a59934b 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)); } + [ConditionalTheory(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 12ea4ded8beed..8d3b1d6caedd0 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,16 @@ internal static CultureData GetCultureData(int culture, bool bUseUserOverride) if (GlobalizationMode.Invariant) { + if (!GlobalizationMode.PredefinedCulturesOnly) + { + if (culture is < 1 or > 0xf_ffff) + { + throw new CultureNotFoundException(nameof(culture), culture, SR.Argument_CultureNotSupported); + } + + return Invariant; + } + // LCID is not supported in the InvariantMode throw new CultureNotFoundException(nameof(culture), culture, SR.Argument_CultureNotSupportedInInvariantMode); }