Skip to content

Bound unresolved generic arities - #4332

Open
siegfriedpammer wants to merge 1 commit into
masterfrom
fix/generic-arity-limit
Open

siegfriedpammer wants to merge 1 commit into
masterfrom
fix/generic-arity-limit

Conversation

@siegfriedpammer

Copy link
Copy Markdown
Member

Unresolved type names can encode attacker-controlled generic arities such as Foo40000`. Those values currently size static DummyTypeParameter caches and temporary generic-argument arrays, causing severe memory exhaustion.

Use a practical maximum arity of 64 consistently across reflection-name parsing, unknown types, dummy parameter caches, generic type resolution, and C# AST construction. Excessive arities remain unresolved without allocating proportional arrays.

Addresses scan finding ANT-2026-PC9I5I73.

Tests:

  • OPENSSL_ENABLE_SHA1_SIGNATURES=1 dotnet test --project ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj --no-restore --report-trx --filter "FullyQualifiedName~ReflectionHelperTests|FullyQualifiedName~TypeSystemLoaderTests|FullyQualifiedName~ILPrettyTestRunner.WeirdEnums" (185 passed)

Unresolved type names and generic signatures can supply attacker-controlled arities that size static caches and temporary argument arrays. Use one practical limit across parsing, dummy parameters, type resolution, and C# AST construction so excessive arities remain bounded before allocation.

Assisted-by: OpenCode:gpt-5.6-luna:OpenCode
@siegfriedpammer
siegfriedpammer force-pushed the fix/generic-arity-limit branch from 40cfbd9 to 45fc553 Compare November 8, 2026 11:26
@dgrunwald

Copy link
Copy Markdown
Member

Is 64 some .NET limitation? If not, that seems unnecessarily low as a limit.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants