From 41ba26d00a585e6cf2e151b1214b941bb70a31e3 Mon Sep 17 00:00:00 2001 From: Ben Gruver Date: Sun, 18 Sep 2016 14:25:38 -0700 Subject: [PATCH] Improve the canNarrowAfterInstanceOf check when using an empty bootclasspath If the types in question can't be resolved, we just assume that the narrowing can't happen. --- .../org/jf/dexlib2/analysis/MethodAnalyzer.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 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 64275402..7d3302ca 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/analysis/MethodAnalyzer.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/analysis/MethodAnalyzer.java @@ -1185,13 +1185,17 @@ public class MethodAnalyzer { Reference reference = ((Instruction22c)analyzedInstanceOfInstruction.getInstruction()).getReference(); RegisterType registerType = RegisterType.getRegisterType(classPath, (TypeReference)reference); - if (registerType.type != null && !registerType.type.isInterface()) { - int objectRegister = ((TwoRegisterInstruction)analyzedInstanceOfInstruction.getInstruction()) - .getRegisterB(); + try { + if (registerType.type != null && !registerType.type.isInterface()) { + int objectRegister = ((TwoRegisterInstruction)analyzedInstanceOfInstruction.getInstruction()) + .getRegisterB(); - RegisterType originalType = analyzedIfInstruction.getPreInstructionRegisterType(objectRegister); + RegisterType originalType = analyzedIfInstruction.getPreInstructionRegisterType(objectRegister); - return isNarrowingConversion(originalType, registerType); + return isNarrowingConversion(originalType, registerType); + } + } catch (UnresolvedClassException ex) { + return false; } } return false;