aboutsummaryrefslogtreecommitdiff
path: root/dexlib2/src
diff options
context:
space:
mode:
authorBen Gruver <bgruv@google.com>2016-02-14 19:08:19 -0800
committerBen Gruver <bgruv@google.com>2016-02-20 12:04:47 -0800
commit5b2943d89bbb4acbe2500b7bb2d745e6e3bdea1a (patch)
treea49357c13cb06311b8ea6ebcd0343c9c5f1824f6 /dexlib2/src
parent6429b3daa9e521ebde73958c2fc21bac106d15a2 (diff)
downloadsmali-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.java12
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);