Check for invalid locals index
This commit is contained in:
parent
15713a2b38
commit
51b21c9f9f
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue
Block a user