Browse Source

Fix possible NRE in TransformExpressionTrees.MatchGetTypeFromHandle and related methods

pull/2044/head
Siegfried Pammer 5 years ago
parent
commit
d2abce2a7b
  1. 38
      ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs

38
ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs

@ -1290,19 +1290,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
return false; return false;
if (!(arg is CallInstruction call && call.Method.FullName == "System.Reflection.MethodBase.GetMethodFromHandle")) if (!(arg is CallInstruction call && call.Method.FullName == "System.Reflection.MethodBase.GetMethodFromHandle"))
return false; return false;
switch (call.Arguments.Count) { return MatchFromHandleParameterList(call, out member);
case 1:
if (!call.Arguments[0].MatchLdMemberToken(out member))
return false;
break;
case 2:
if (!call.Arguments[0].MatchLdMemberToken(out member))
return false;
if (!call.Arguments[1].MatchLdTypeToken(out var genericType))
return false;
break;
}
return true;
} }
bool MatchGetConstructorFromHandle(ILInstruction inst, out IMember member) bool MatchGetConstructorFromHandle(ILInstruction inst, out IMember member)
@ -1315,19 +1303,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
return false; return false;
if (!(arg is CallInstruction call && call.Method.FullName == "System.Reflection.MethodBase.GetMethodFromHandle")) if (!(arg is CallInstruction call && call.Method.FullName == "System.Reflection.MethodBase.GetMethodFromHandle"))
return false; return false;
switch (call.Arguments.Count) { return MatchFromHandleParameterList(call, out member);
case 1:
if (!call.Arguments[0].MatchLdMemberToken(out member))
return false;
break;
case 2:
if (!call.Arguments[0].MatchLdMemberToken(out member))
return false;
if (!call.Arguments[1].MatchLdTypeToken(out var genericType))
return false;
break;
}
return true;
} }
bool MatchGetFieldFromHandle(ILInstruction inst, out IMember member) bool MatchGetFieldFromHandle(ILInstruction inst, out IMember member)
@ -1335,6 +1311,12 @@ namespace ICSharpCode.Decompiler.IL.Transforms
member = null; member = null;
if (!(inst is CallInstruction call && call.Method.FullName == "System.Reflection.FieldInfo.GetFieldFromHandle")) if (!(inst is CallInstruction call && call.Method.FullName == "System.Reflection.FieldInfo.GetFieldFromHandle"))
return false; return false;
return MatchFromHandleParameterList(call, out member);
}
static bool MatchFromHandleParameterList(CallInstruction call, out IMember member)
{
member = null;
switch (call.Arguments.Count) { switch (call.Arguments.Count) {
case 1: case 1:
if (!call.Arguments[0].MatchLdMemberToken(out member)) if (!call.Arguments[0].MatchLdMemberToken(out member))
@ -1343,9 +1325,11 @@ namespace ICSharpCode.Decompiler.IL.Transforms
case 2: case 2:
if (!call.Arguments[0].MatchLdMemberToken(out member)) if (!call.Arguments[0].MatchLdMemberToken(out member))
return false; return false;
if (!call.Arguments[1].MatchLdTypeToken(out var genericType)) if (!call.Arguments[1].MatchLdTypeToken(out _))
return false; return false;
break; break;
default:
return false;
} }
return true; return true;
} }

Loading…
Cancel
Save