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

Commit 0ddcf7e

Browse files
authored
Fix resource lookup recusrion issue (#13948)
1 parent ae51536 commit 0ddcf7e

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
@@ -341,6 +341,25 @@ public CultureInfo(String name, bool useUserOverride) {
341341
this.m_isInherited = (this.GetType() != typeof(System.Globalization.CultureInfo));
342342
}
343343

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

345364
#if FEATURE_USE_LCID
346365
public CultureInfo(int culture) : this(culture, true) {
@@ -926,25 +945,22 @@ public virtual CultureInfo Parent
926945

927946
if (null == m_parent)
928947
{
929-
try
930-
{
931-
string parentName = this.m_cultureData.SPARENT;
948+
string parentName = this.m_cultureData.SPARENT;
932949

933-
if (String.IsNullOrEmpty(parentName))
950+
if (String.IsNullOrEmpty(parentName))
951+
{
952+
m_parent = InvariantCulture;
953+
}
954+
else
955+
{
956+
m_parent = CreateCultureInfoNoThrow(parentName, m_cultureData.UseUserOverride);
957+
if (m_parent == null)
934958
{
959+
// For whatever reason our IPARENT or SPARENT wasn't correct, so use invariant
960+
// We can't allow ourselves to fail. In case of custom cultures the parent of the
961+
// current custom culture isn't installed.
935962
m_parent = InvariantCulture;
936963
}
937-
else
938-
{
939-
m_parent = new CultureInfo(parentName, this.m_cultureData.UseUserOverride);
940-
}
941-
}
942-
catch (ArgumentException)
943-
{
944-
// For whatever reason our IPARENT or SPARENT wasn't correct, so use invariant
945-
// We can't allow ourselves to fail. In case of custom cultures the parent of the
946-
// current custom culture isn't installed.
947-
m_parent = InvariantCulture;
948964
}
949965
}
950966
return m_parent;

0 commit comments

Comments
 (0)