Skip to content

Commit a2e1d21

Browse files
authored
Adjust for culture name normalization in AssemblyNameInfoFuzzer (#114231)
* add a test with comment that explains the unexpected behavior * adjust the AssemblyNameInfoFuzzer * mention normalization as well
1 parent e2ec536 commit a2e1d21

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

src/libraries/Fuzzing/DotnetFuzzing/Fuzzers/AssemblyNameInfoFuzzer.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,21 @@ private static void Test(Span<char> span)
6161
Assert.Equal(fromTryParse.ToAssemblyName().CultureName, fromParse.ToAssemblyName().CultureName);
6262

6363
Assert.Equal(fromTryParse.Name, fromParse.ToAssemblyName().Name);
64-
Assert.Equal(fromTryParse.CultureName, fromParse.ToAssemblyName().CultureName);
6564
Assert.Equal(fromTryParse.Version, fromParse.ToAssemblyName().Version);
6665

66+
if (fromTryParse.CultureName is not null)
67+
{
68+
// When converting to AssemblyName, the culture name is lower-cased
69+
// by the CultureInfo ctor that calls CultureData.GetCultureData
70+
// which lowers the name for caching and normalization purposes.
71+
Assert.Equal(fromTryParse.CultureName.ToLower(), fromParse.ToAssemblyName().CultureName);
72+
}
73+
else
74+
{
75+
Assert.True(fromParse.ToAssemblyName().CultureName is null);
76+
}
77+
78+
6779
// AssemblyNameInfo.FullName can be different than AssemblyName.FullName:
6880
// AssemblyNameInfo includes public key, AssemblyName only its Token.
6981

src/libraries/System.Reflection.Metadata/tests/Metadata/AssemblyNameInfoTests.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,17 @@ public void EmptyInputIsInvalid()
105105
Assert.Throws<ArgumentException>(() => AssemblyNameInfo.Parse("".AsSpan()));
106106
}
107107

108+
[Fact]
109+
public void CultureNameGetLoweredByToAssemblyName()
110+
{
111+
AssemblyNameInfo assemblyNameInfo = AssemblyNameInfo.Parse("test,culture=aA".AsSpan());
112+
Assert.Equal("aA", assemblyNameInfo.CultureName);
113+
// When converting to AssemblyName, the culture name is lower-cased
114+
// by the CultureInfo ctor that calls CultureData.GetCultureData
115+
// which lowers the name for caching and normalization purposes.
116+
Assert.Equal("aa", assemblyNameInfo.ToAssemblyName().CultureName);
117+
}
118+
108119
static void Roundtrip(AssemblyName source)
109120
{
110121
AssemblyNameInfo parsed = AssemblyNameInfo.Parse(source.FullName.AsSpan());

0 commit comments

Comments
 (0)