aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gruver <bgruv@google.com>2014-01-29 19:39:34 -0800
committerBen Gruver <bgruv@google.com>2014-01-29 19:39:34 -0800
commitdd2079cd53c94056436d8c7c26df801fb210df4d (patch)
treeaa38ad8d2bdd35b6fe4a230a2535680ac0ed58a7
parent15e44d5b8b0cc77f81f41a2a9f553e2987d5033c (diff)
downloadsmali-dd2079cd53c94056436d8c7c26df801fb210df4d.tar.gz
Fix NPE when using a custom inline method table
-rw-r--r--baksmali/src/main/java/org/jf/baksmali/baksmali.java6
-rw-r--r--baksmali/src/main/java/org/jf/baksmali/baksmaliOptions.java2
-rw-r--r--baksmali/src/main/java/org/jf/baksmali/main.java5
3 files changed, 10 insertions, 3 deletions
diff --git a/baksmali/src/main/java/org/jf/baksmali/baksmali.java b/baksmali/src/main/java/org/jf/baksmali/baksmali.java
index fcc89d7a..056ff486 100644
--- a/baksmali/src/main/java/org/jf/baksmali/baksmali.java
+++ b/baksmali/src/main/java/org/jf/baksmali/baksmali.java
@@ -34,6 +34,7 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Ordering;
import org.jf.baksmali.Adaptors.ClassDefinition;
import org.jf.dexlib2.analysis.ClassPath;
+import org.jf.dexlib2.analysis.CustomInlineMethodResolver;
import org.jf.dexlib2.iface.ClassDef;
import org.jf.dexlib2.iface.DexFile;
import org.jf.dexlib2.util.SyntheticAccessorResolver;
@@ -67,6 +68,11 @@ public class baksmali {
options.classPath = ClassPath.fromClassPath(options.bootClassPathDirs,
Iterables.concat(options.bootClassPathEntries, extraClassPathEntries), dexFile,
options.apiLevel);
+
+ if (options.customInlineDefinitions != null) {
+ options.inlineResolver = new CustomInlineMethodResolver(options.classPath,
+ options.customInlineDefinitions);
+ }
} catch (Exception ex) {
System.err.println("\n\nError occurred while loading boot class path files. Aborting.");
ex.printStackTrace(System.err);
diff --git a/baksmali/src/main/java/org/jf/baksmali/baksmaliOptions.java b/baksmali/src/main/java/org/jf/baksmali/baksmaliOptions.java
index 48a9146b..1e83c288 100644
--- a/baksmali/src/main/java/org/jf/baksmali/baksmaliOptions.java
+++ b/baksmali/src/main/java/org/jf/baksmali/baksmaliOptions.java
@@ -36,6 +36,7 @@ import org.jf.dexlib2.analysis.ClassPath;
import org.jf.dexlib2.analysis.InlineMethodResolver;
import org.jf.dexlib2.util.SyntheticAccessorResolver;
+import java.io.File;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
@@ -71,6 +72,7 @@ public class baksmaliOptions {
public boolean deodex = false;
public boolean ignoreErrors = false;
public boolean checkPackagePrivateAccess = false;
+ public File customInlineDefinitions = null;
public InlineMethodResolver inlineResolver = null;
public int registerInfo = 0;
public ClassPath classPath = null;
diff --git a/baksmali/src/main/java/org/jf/baksmali/main.java b/baksmali/src/main/java/org/jf/baksmali/main.java
index db059f8c..274f1441 100644
--- a/baksmali/src/main/java/org/jf/baksmali/main.java
+++ b/baksmali/src/main/java/org/jf/baksmali/main.java
@@ -31,7 +31,6 @@ package org.jf.baksmali;
import com.google.common.collect.Lists;
import org.apache.commons.cli.*;
import org.jf.dexlib2.DexFileFactory;
-import org.jf.dexlib2.analysis.CustomInlineMethodResolver;
import org.jf.dexlib2.analysis.InlineMethodResolver;
import org.jf.dexlib2.dexbacked.DexBackedDexFile;
import org.jf.dexlib2.dexbacked.DexBackedOdexFile;
@@ -217,7 +216,7 @@ public class main {
options.ignoreErrors = true;
break;
case 'T':
- options.inlineResolver = new CustomInlineMethodResolver(options.classPath, new File(commandLine.getOptionValue("T")));
+ options.customInlineDefinitions = new File(commandLine.getOptionValue("T"));
break;
default:
assert false;
@@ -270,7 +269,7 @@ public class main {
}
}
- if (options.inlineResolver == null && dexFile instanceof DexBackedOdexFile) {
+ if (options.customInlineDefinitions == null && dexFile instanceof DexBackedOdexFile) {
options.inlineResolver =
InlineMethodResolver.createInlineMethodResolver(((DexBackedOdexFile)dexFile).getOdexVersion());
}