Browse Source

Add guard code in case standalone signature is invalid.

pull/1198/head
Siegfried Pammer 7 years ago
parent
commit
37ae59c70d
  1. 11
      ICSharpCode.Decompiler/Disassembler/MethodBodyDisassembler.cs

11
ICSharpCode.Decompiler/Disassembler/MethodBodyDisassembler.cs

@ -99,7 +99,16 @@ namespace ICSharpCode.Decompiler.Disassembler @@ -99,7 +99,16 @@ namespace ICSharpCode.Decompiler.Disassembler
{
if (body.LocalSignature.IsNil) return;
var metadata = method.Module.GetMetadataReader();
var signature = metadata.GetStandaloneSignature(body.LocalSignature).DecodeLocalSignature(new DisassemblerSignatureProvider(method.Module, output), new Metadata.GenericContext(method));
var blob = metadata.GetStandaloneSignature(body.LocalSignature);
if (blob.GetKind() != StandaloneSignatureKind.LocalVariables)
return;
var reader = metadata.GetBlobReader(blob.Signature);
if (reader.Length < 2)
return;
reader.Offset = 1;
if (reader.ReadCompressedInteger() == 0)
return;
var signature = blob.DecodeLocalSignature(new DisassemblerSignatureProvider(method.Module, output), new GenericContext(method));
if (!signature.IsEmpty) {
output.Write(".locals ");
if (body.LocalVariablesInitialized)

Loading…
Cancel
Save