mirror of
https://github.com/revanced/smali.git
synced 2025-05-01 23:24:38 +02:00
Add better error messages when finding embedded dex files for oat files
This commit is contained in:
parent
bdbea44b98
commit
3b70c36296
@ -298,6 +298,10 @@ public final class DexFileFactory {
|
|||||||
public DexFileNotFoundException(@Nullable String message, Object... formatArgs) {
|
public DexFileNotFoundException(@Nullable String message, Object... formatArgs) {
|
||||||
super(message, formatArgs);
|
super(message, formatArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public DexFileNotFoundException(Throwable cause, @Nullable String message, Object... formatArgs) {
|
||||||
|
super(cause, message, formatArgs);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class UnsupportedOatVersionException extends ExceptionWithContext {
|
public static class UnsupportedOatVersionException extends ExceptionWithContext {
|
||||||
|
@ -58,6 +58,10 @@ public class CDexBackedDexFile extends DexBackedDexFile {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isCdex(byte[] buf, int offset) {
|
public static boolean isCdex(byte[] buf, int offset) {
|
||||||
|
if (offset + 4 > buf.length) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
byte[] cdexMagic;
|
byte[] cdexMagic;
|
||||||
try {
|
try {
|
||||||
cdexMagic = "cdex".getBytes("US-ASCII");
|
cdexMagic = "cdex".getBytes("US-ASCII");
|
||||||
|
@ -35,10 +35,12 @@ import com.google.common.base.Function;
|
|||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.google.common.collect.Iterators;
|
import com.google.common.collect.Iterators;
|
||||||
import com.google.common.io.ByteStreams;
|
import com.google.common.io.ByteStreams;
|
||||||
|
import org.jf.dexlib2.DexFileFactory;
|
||||||
import org.jf.dexlib2.Opcodes;
|
import org.jf.dexlib2.Opcodes;
|
||||||
import org.jf.dexlib2.dexbacked.OatFile.SymbolTable.Symbol;
|
import org.jf.dexlib2.dexbacked.OatFile.SymbolTable.Symbol;
|
||||||
import org.jf.dexlib2.dexbacked.raw.HeaderItem;
|
import org.jf.dexlib2.dexbacked.raw.HeaderItem;
|
||||||
import org.jf.dexlib2.iface.MultiDexContainer;
|
import org.jf.dexlib2.iface.MultiDexContainer;
|
||||||
|
import org.jf.dexlib2.util.DexUtil;
|
||||||
import org.jf.util.AbstractForwardSequentialList;
|
import org.jf.util.AbstractForwardSequentialList;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
@ -571,6 +573,17 @@ public class OatFile extends DexBuffer implements MultiDexContainer<DexBackedDex
|
|||||||
if (CDexBackedDexFile.isCdex(buf, dexOffset)) {
|
if (CDexBackedDexFile.isCdex(buf, dexOffset)) {
|
||||||
return new OatCDexFile(buf, dexOffset);
|
return new OatCDexFile(buf, dexOffset);
|
||||||
} else {
|
} else {
|
||||||
|
try {
|
||||||
|
DexUtil.verifyDexHeader(buf, dexOffset);
|
||||||
|
} catch (DexBackedDexFile.NotADexFile ex) {
|
||||||
|
if (getOatVersion() >= 87) {
|
||||||
|
throw new DexFileFactory.DexFileNotFoundException(ex,
|
||||||
|
"Could not locate the embedded dex file %s. Is the vdex file missing?", entryName);
|
||||||
|
} else {
|
||||||
|
throw new DexFileFactory.DexFileNotFoundException(ex,
|
||||||
|
"The embedded dex file %s does not appear to be a valid dex file.", entryName);
|
||||||
|
}
|
||||||
|
}
|
||||||
return new OatDexFile(buf, dexOffset);
|
return new OatDexFile(buf, dexOffset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user