Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Commit 2278610

Browse files
authored
Fix resource lookup recursion issue (#13945)
1 parent c1daee5 commit 2278610

File tree

1 file changed

+31
-15
lines changed

1 file changed

+31
-15
lines changed

src/mscorlib/src/System/Globalization/CultureInfo.cs

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,24 @@ public CultureInfo(String name, bool useUserOverride) {
339339
this.m_isInherited = (this.GetType() != typeof(System.Globalization.CultureInfo));
340340
}
341341

342+
private CultureInfo(CultureData cultureData)
343+
{
344+
Contract.Assert(cultureData != null);
345+
m_cultureData = cultureData;
346+
m_name = cultureData.CultureName;
347+
m_isInherited = false;
348+
}
349+
350+
private static CultureInfo CreateCultureInfoNoThrow(string name, bool useUserOverride)
351+
{
352+
Contract.Assert(name != null);
353+
CultureData cultureData = CultureData.GetCultureData(name, useUserOverride);
354+
if (cultureData == null)
355+
{
356+
return null;
357+
}
358+
return new CultureInfo(cultureData);
359+
}
342360

343361
#if FEATURE_USE_LCID
344362
public CultureInfo(int culture) : this(culture, true) {
@@ -922,27 +940,25 @@ public virtual CultureInfo Parent
922940

923941
if (null == m_parent)
924942
{
925-
try
926-
{
927-
string parentName = this.m_cultureData.SPARENT;
943+
string parentName = this.m_cultureData.SPARENT;
928944

929-
if (String.IsNullOrEmpty(parentName))
945+
if (String.IsNullOrEmpty(parentName))
946+
{
947+
m_parent = InvariantCulture;
948+
}
949+
else
950+
{
951+
m_parent = CreateCultureInfoNoThrow(parentName, m_cultureData.UseUserOverride);
952+
if (m_parent == null)
930953
{
954+
// For whatever reason our IPARENT or SPARENT wasn't correct, so use invariant
955+
// We can't allow ourselves to fail. In case of custom cultures the parent of the
956+
// current custom culture isn't installed.
931957
m_parent = InvariantCulture;
932958
}
933-
else
934-
{
935-
m_parent = new CultureInfo(parentName, this.m_cultureData.UseUserOverride);
936-
}
937-
}
938-
catch (ArgumentException)
939-
{
940-
// For whatever reason our IPARENT or SPARENT wasn't correct, so use invariant
941-
// We can't allow ourselves to fail. In case of custom cultures the parent of the
942-
// current custom culture isn't installed.
943-
m_parent = InvariantCulture;
944959
}
945960
}
961+
946962
return m_parent;
947963
}
948964
}

0 commit comments

Comments
 (0)