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 void visitInvokeDynamicInsn(String name, String descriptor, Handle bootst } private ReferenceTargetType getReferenceTargetType(int stackDepth) { + if (stack == null) { // Unreachable instruction + return ReferenceTargetType.uninitialized(); + } + if (stackDepth >= stack.size()) { throw new IllegalStateException("Stack depth " + stackDepth + " is higher than the stack: " + stackValuesToString(stack) + " in method " + callerEntry); } Object stackValue = stack.get(stack.size() - 1 - stackDepth); - if (stackValue.equals(Opcodes.UNINITIALIZED_THIS) || stackValue instanceof Label) { + if (stackValue.equals(Opcodes.UNINITIALIZED_THIS) || stackValue.equals(Opcodes.NULL) || stackValue instanceof Label) { return ReferenceTargetType.uninitialized(); }