diff options
author | Ben Gruver <bgruv@google.com> | 2016-02-14 19:08:19 -0800 |
---|---|---|
committer | Ben Gruver <bgruv@google.com> | 2016-02-20 12:04:47 -0800 |
commit | 5b2943d89bbb4acbe2500b7bb2d745e6e3bdea1a (patch) | |
tree | a49357c13cb06311b8ea6ebcd0343c9c5f1824f6 /dexlib2/src | |
parent | 6429b3daa9e521ebde73958c2fc21bac106d15a2 (diff) | |
download | smali-5b2943d89bbb4acbe2500b7bb2d745e6e3bdea1a.tar.gz |
Check for switch offset validity in the MethodAnalyzer
Diffstat (limited to 'dexlib2/src')
-rw-r--r-- | dexlib2/src/main/java/org/jf/dexlib2/analysis/MethodAnalyzer.java | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/dexlib2/src/main/java/org/jf/dexlib2/analysis/MethodAnalyzer.java b/dexlib2/src/main/java/org/jf/dexlib2/analysis/MethodAnalyzer.java index eca9391f..f874f1b8 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/analysis/MethodAnalyzer.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/analysis/MethodAnalyzer.java @@ -499,11 +499,19 @@ public class MethodAnalyzer { OffsetInstruction offsetInstruction = (OffsetInstruction)instruction.instruction; if (instructionOpcode == Opcode.PACKED_SWITCH || instructionOpcode == Opcode.SPARSE_SWITCH) { - SwitchPayload switchPayload = (SwitchPayload)analyzedInstructions.get(instructionCodeAddress + - offsetInstruction.getCodeOffset()).instruction; + AnalyzedInstruction analyzedSwitchPayload = analyzedInstructions.get( + instructionCodeAddress + offsetInstruction.getCodeOffset()); + if (analyzedSwitchPayload == null) { + throw new AnalysisException("Invalid switch payload offset"); + } + SwitchPayload switchPayload = (SwitchPayload)analyzedSwitchPayload.instruction; + for (SwitchElement switchElement: switchPayload.getSwitchElements()) { AnalyzedInstruction targetInstruction = analyzedInstructions.get(instructionCodeAddress + switchElement.getOffset()); + if (targetInstruction == null) { + throw new AnalysisException("Invalid switch target offset"); + } addPredecessorSuccessor(instruction, targetInstruction, exceptionHandlers, instructionsToProcess); |