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

Loading…
Cancel
Save