Browse Source

Guard against nil field tokens in the localloc cpblk prefix

HandleCpblkInitializer already rejects fields with a nil metadata token
before casting to FieldDefinitionHandle; the localloc prefix path did
not, so a crafted assembly could make GetFieldDefinition throw instead
of the transform being skipped.

Assisted-by: Claude:claude-fable-5:Claude Code
master
Siegfried Pammer 1 day ago committed by Siegfried Pammer
parent
commit
c803b71a47
  1. 2
      ICSharpCode.Decompiler/IL/Transforms/TransformArrayInitializers.cs

2
ICSharpCode.Decompiler/IL/Transforms/TransformArrayInitializers.cs

@ -518,6 +518,8 @@ namespace ICSharpCode.Decompiler.IL.Transforms
return; return;
if (!MatchGetStaticFieldAddress(src, out var field)) if (!MatchGetStaticFieldAddress(src, out var field))
return; return;
if (field.MetadataToken.IsNil)
return;
var fd = context.PEFile.Metadata.GetFieldDefinition((FieldDefinitionHandle)field.MetadataToken); var fd = context.PEFile.Metadata.GetFieldDefinition((FieldDefinitionHandle)field.MetadataToken);
if (!fd.HasFlag(System.Reflection.FieldAttributes.HasFieldRVA)) if (!fd.HasFlag(System.Reflection.FieldAttributes.HasFieldRVA))
return; return;

Loading…
Cancel
Save