Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Stack overflow trying to resolve certain TypeSignature and MemberReference #381

Closed
sgkoishi opened this issue Nov 26, 2022 · 3 comments · Fixed by #382
Closed

Stack overflow trying to resolve certain TypeSignature and MemberReference #381

sgkoishi opened this issue Nov 26, 2022 · 3 comments · Fixed by #382
Labels
bug dotnet Issues related to AsmResolver.DotNet

Comments

@sgkoishi
Copy link

AsmResolver Version

5.0.0-beta.2

.NET Version

.NET 6.0

Operating System

Windows

Describe the Bug

Stack overflow trying to resolve certain TypeSignature and MemberReference.

How To Reproduce

foreach (var type in asm.ManifestModule.GetAllTypes())
{
    foreach (var method in type.Methods)
    {
        foreach (var target in method.Parameters)
        {
            // target.ParameterType.Resolve();
        }
        if (method.CilMethodBody == null)
        {
            continue;
        }
        foreach (var instr in method.CilMethodBody.Instructions)
        {
            if (instr.Operand is MemberReference mr)
            {
                // mr.Resolve();
            }
        }
    }
}

Expected Behavior

Return resolved TypeDefinition or null.

Actual Behavior

For MemberReference

Stack overflow.
Repeat 5065 times:
--------------------------------
   at System.Collections.Generic.Dictionary`2[[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].FindValue(System.__Canon)
   at AsmResolver.DotNet.AssemblyResolverBase.Resolve(AsmResolver.DotNet.AssemblyDescriptor)
   at AsmResolver.DotNet.AssemblyReference.GetPublicKeyToken()
   at AsmResolver.DotNet.Signatures.SignatureComparer.GetHashCode(AsmResolver.DotNet.AssemblyDescriptor)
--------------------------------
   at System.Collections.Generic.Dictionary`2[[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].FindValue(System.__Canon)
   at AsmResolver.DotNet.AssemblyResolverBase.Resolve(AsmResolver.DotNet.AssemblyDescriptor)
   at AsmResolver.DotNet.DefaultMetadataResolver+TypeResolution.ResolveTypeReference(AsmResolver.DotNet.TypeReference)
   at AsmResolver.DotNet.DefaultMetadataResolver.ResolveTypeReference(AsmResolver.DotNet.TypeReference)
   at AsmResolver.DotNet.DefaultMetadataResolver.ResolveTypeSignature(AsmResolver.DotNet.Signatures.Types.TypeSignature)
   at AsmResolver.DotNet.DefaultMetadataResolver.ResolveType(AsmResolver.DotNet.ITypeDescriptor)
   at AsmResolver.DotNet.DefaultMetadataResolver.ResolveType(AsmResolver.DotNet.ITypeDescriptor)
   at AsmResolver.DotNet.DefaultMetadataResolver.ResolveMethod(AsmResolver.DotNet.IMethodDescriptor)

For TypeSignature

Stack overflow.
Repeat 5065 times:
--------------------------------
   at System.Collections.Generic.Dictionary`2[[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].FindValue(System.__Canon)
   at AsmResolver.DotNet.AssemblyResolverBase.Resolve(AsmResolver.DotNet.AssemblyDescriptor)
   at AsmResolver.DotNet.AssemblyReference.GetPublicKeyToken()
   at AsmResolver.DotNet.Signatures.SignatureComparer.GetHashCode(AsmResolver.DotNet.AssemblyDescriptor)
--------------------------------
   at System.Collections.Generic.Dictionary`2[[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].FindValue(System.__Canon)
   at AsmResolver.DotNet.AssemblyResolverBase.Resolve(AsmResolver.DotNet.AssemblyDescriptor)
   at AsmResolver.DotNet.DefaultMetadataResolver+TypeResolution.ResolveTypeReference(AsmResolver.DotNet.TypeReference)
   at AsmResolver.DotNet.DefaultMetadataResolver.ResolveTypeReference(AsmResolver.DotNet.TypeReference)
   at AsmResolver.DotNet.DefaultMetadataResolver.ResolveType(AsmResolver.DotNet.ITypeDescriptor)

Additional Context

Target assembly on NuGet: OTAPI.Upcoming v3.1.20

@sgkoishi sgkoishi added the bug label Nov 26, 2022
@Washi1337 Washi1337 added the dotnet Issues related to AsmResolver.DotNet label Nov 26, 2022
@Washi1337
Copy link
Owner

Potential fix is in #382. Could you maybe verify if this indeed solves your problem?

@sgkoishi
Copy link
Author

Yes, it's fixed in #382 bf4ed23

@Washi1337
Copy link
Owner

Nice, this fix will be soon be present on nuget together with the full release of 5.0.

Thanks for reporting once again :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug dotnet Issues related to AsmResolver.DotNet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants