From 51a26180bba108bfe1266d0d0282ce059c672466 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Tue, 8 Jul 2025 19:32:11 +0200 Subject: [PATCH] Fix #3492: Do not crash, if field used by RuntimeHelpers.InitializeArray is malformed. --- .../IL/Transforms/TransformArrayInitializers.cs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/ICSharpCode.Decompiler/IL/Transforms/TransformArrayInitializers.cs b/ICSharpCode.Decompiler/IL/Transforms/TransformArrayInitializers.cs index 45110c12d..7abf46d74 100644 --- a/ICSharpCode.Decompiler/IL/Transforms/TransformArrayInitializers.cs +++ b/ICSharpCode.Decompiler/IL/Transforms/TransformArrayInitializers.cs @@ -843,12 +843,23 @@ namespace ICSharpCode.Decompiler.IL.Transforms bool HandleRuntimeHelpersInitializeArray(Block body, int pos, ILVariable array, IType arrayType, int[] arrayLength, out ILInstruction[] values, out int foundPos) { + values = null; + foundPos = -1; if (MatchInitializeArrayCall(body.Instructions[pos], out var arrayInst, out var field) && arrayInst.MatchLdLoc(array)) { if (field.HasFlag(System.Reflection.FieldAttributes.HasFieldRVA)) { var valuesList = new List(); - var initialValue = field.GetInitialValue(context.PEFile, context.TypeSystem); + BlobReader initialValue; + try + { + initialValue = field.GetInitialValue(context.PEFile, context.TypeSystem); + } + catch (BadImageFormatException ex) + { + array.Function.Warnings.Add($"IL_{body.Instructions[pos].ILRanges.FirstOrDefault().Start:x4}: {ex.Message}"); + return false; + } if (DecodeArrayInitializer(arrayType, initialValue, arrayLength, valuesList)) { values = valuesList.ToArray(); @@ -857,8 +868,6 @@ namespace ICSharpCode.Decompiler.IL.Transforms } } } - values = null; - foundPos = -1; return false; }