diff options
| -rw-r--r-- | enigma/src/main/java/cuchaz/enigma/analysis/index/IndexReferenceVisitor.java | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/enigma/src/main/java/cuchaz/enigma/analysis/index/IndexReferenceVisitor.java b/enigma/src/main/java/cuchaz/enigma/analysis/index/IndexReferenceVisitor.java index ecd460de..698a3517 100644 --- a/enigma/src/main/java/cuchaz/enigma/analysis/index/IndexReferenceVisitor.java +++ b/enigma/src/main/java/cuchaz/enigma/analysis/index/IndexReferenceVisitor.java | |||
| @@ -139,13 +139,17 @@ public class IndexReferenceVisitor extends ClassVisitor { | |||
| 139 | } | 139 | } |
| 140 | 140 | ||
| 141 | private ReferenceTargetType getReferenceTargetType(int stackDepth) { | 141 | private ReferenceTargetType getReferenceTargetType(int stackDepth) { |
| 142 | if (stack == null) { // Unreachable instruction | ||
| 143 | return ReferenceTargetType.uninitialized(); | ||
| 144 | } | ||
| 145 | |||
| 142 | if (stackDepth >= stack.size()) { | 146 | if (stackDepth >= stack.size()) { |
| 143 | throw new IllegalStateException("Stack depth " + stackDepth + " is higher than the stack: " + stackValuesToString(stack) + " in method " + callerEntry); | 147 | throw new IllegalStateException("Stack depth " + stackDepth + " is higher than the stack: " + stackValuesToString(stack) + " in method " + callerEntry); |
| 144 | } | 148 | } |
| 145 | 149 | ||
| 146 | Object stackValue = stack.get(stack.size() - 1 - stackDepth); | 150 | Object stackValue = stack.get(stack.size() - 1 - stackDepth); |
| 147 | 151 | ||
| 148 | if (stackValue.equals(Opcodes.UNINITIALIZED_THIS) || stackValue instanceof Label) { | 152 | if (stackValue.equals(Opcodes.UNINITIALIZED_THIS) || stackValue.equals(Opcodes.NULL) || stackValue instanceof Label) { |
| 149 | return ReferenceTargetType.uninitialized(); | 153 | return ReferenceTargetType.uninitialized(); |
| 150 | } | 154 | } |
| 151 | 155 | ||