Check for invalid locals index

This commit is contained in:
de4dot 2012-02-08 22:01:47 +01:00
parent 15713a2b38
commit 51b21c9f9f

View File

@ -224,6 +224,7 @@ namespace de4dot.blocks {
// Returns the variable or null if it's not a ldloc/stloc instruction. It does not return
// a local variable if it's a ldloca/ldloca.s instruction.
public static VariableDefinition getLocalVar(IList<VariableDefinition> locals, Instruction instr) {
int index;
switch (instr.OpCode.Code) {
case Code.Ldloc:
case Code.Ldloc_S:
@ -235,17 +236,23 @@ namespace de4dot.blocks {
case Code.Ldloc_1:
case Code.Ldloc_2:
case Code.Ldloc_3:
return locals[instr.OpCode.Code - Code.Ldloc_0];
index = instr.OpCode.Code - Code.Ldloc_0;
break;
case Code.Stloc_0:
case Code.Stloc_1:
case Code.Stloc_2:
case Code.Stloc_3:
return locals[instr.OpCode.Code - Code.Stloc_0];
index = instr.OpCode.Code - Code.Stloc_0;
break;
default:
return null;
}
if (index < locals.Count)
return locals[index];
return null;
}
public static bool isConditionalBranch(Code code) {