Skip to content

Commit 602cd72

Browse files
committed
BUGFIX: Exclude strong name in SignatureComparer.GetHashCode(AssemblyDescriptor) when IgnoreStrongNames flag is set
1 parent 71e42b6 commit 602cd72

2 files changed

Lines changed: 30 additions & 6 deletions

File tree

src/AsmResolver.DotNet/Signatures/SignatureComparer.ResolutionScope.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,11 @@ public virtual int GetHashCode(AssemblyDescriptor obj)
8383
if (!AcceptNewerAssemblyVersionNumbers && !AcceptOlderAssemblyVersionNumbers)
8484
hashCode = (hashCode * 397) ^ obj.Version.GetHashCode();
8585

86-
byte[]? publicKeyToken = obj.GetPublicKeyToken();
87-
hashCode = (hashCode * 397) ^ (publicKeyToken is not null ? GetHashCode(publicKeyToken) : 0);
86+
if (!IgnoreStrongNames)
87+
{
88+
byte[]? publicKeyToken = obj.GetPublicKeyToken();
89+
hashCode = (hashCode * 397) ^ (publicKeyToken is not null ? GetHashCode(publicKeyToken) : 0);
90+
}
8891

8992
return hashCode;
9093
}

test/AsmResolver.DotNet.Tests/Signatures/SignatureComparerTest.cs

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -201,10 +201,11 @@ public void AssemblyHashCodeStrict()
201201
{
202202
var assembly1 = new AssemblyReference("SomeAssembly", new Version(1, 2, 3, 4));
203203
var assembly2 = new AssemblyReference("SomeAssembly", new Version(1, 2, 3, 4));
204+
var assembly3 = new AssemblyReference("SomeAssembly", new Version(1, 2, 3, 4), false, [1, 2, 3, 4, 5, 6, 7, 8]);
204205

205-
Assert.Equal(
206-
_comparer.GetHashCode((AssemblyDescriptor) assembly1),
207-
_comparer.GetHashCode((AssemblyDescriptor) assembly2));
206+
var comparer = new SignatureComparer();
207+
Assert.Equal(comparer.GetHashCode(assembly1), _comparer.GetHashCode(assembly2));
208+
Assert.NotEqual(comparer.GetHashCode(assembly1), _comparer.GetHashCode(assembly3));
208209
}
209210

210211
[Fact]
@@ -214,9 +215,29 @@ public void AssemblyHashCodeVersionAgnostic()
214215
var assembly2 = new AssemblyReference("SomeAssembly", new Version(5, 6, 7, 8));
215216

216217
var comparer = new SignatureComparer(SignatureComparisonFlags.VersionAgnostic);
218+
Assert.Equal(comparer.GetHashCode(assembly1), comparer.GetHashCode(assembly2));
219+
}
220+
221+
[Fact]
222+
public void AssemblyHashCodeIgnoreStrongNames()
223+
{
224+
var assembly1 = new AssemblyReference(
225+
"SomeAssembly",
226+
new Version(1, 2, 3, 4),
227+
false,
228+
[1, 2, 3, 4, 5, 6, 7, 8]
229+
);
230+
231+
var assembly2 = new AssemblyReference(
232+
"SomeAssembly",
233+
new Version(1, 2, 3, 4)
234+
);
235+
236+
var comparer = new SignatureComparer(SignatureComparisonFlags.IgnoreStrongNames);
217237
Assert.Equal(
218238
comparer.GetHashCode((AssemblyDescriptor) assembly1),
219-
comparer.GetHashCode((AssemblyDescriptor) assembly2));
239+
comparer.GetHashCode((AssemblyDescriptor) assembly2)
240+
);
220241
}
221242

222243
[Fact]

0 commit comments

Comments
 (0)