diff --git a/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedMethodImplementation.java b/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedMethodImplementation.java index 0c06b1d7..676d86cd 100644 --- a/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedMethodImplementation.java +++ b/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedMethodImplementation.java @@ -123,7 +123,16 @@ public class DexBackedMethodImplementation implements MethodImplementation { @Nonnull private DebugInfo getDebugInfo() { - return DebugInfo.newOrEmpty(dexFile, dexFile.readSmallUint(codeOffset + CodeItem.DEBUG_INFO_OFFSET), this); + int debugOffset = dexFile.readInt(codeOffset + CodeItem.DEBUG_INFO_OFFSET); + + if (debugOffset == -1 || debugOffset == 0) { + return DebugInfo.newOrEmpty(dexFile, 0, this); + } + if (debugOffset < 0) { + System.err.println("%s: Invalid debug offset"); + return DebugInfo.newOrEmpty(dexFile, 0, this); + } + return DebugInfo.newOrEmpty(dexFile, debugOffset, this); } @Nonnull @Override diff --git a/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/CodeItem.java b/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/CodeItem.java index 9c79e270..27d72ad1 100644 --- a/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/CodeItem.java +++ b/brut.apktool.smali/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/CodeItem.java @@ -100,10 +100,10 @@ public class CodeItem { int triesCount = reader.readUshort(); out.annotate(2, "tries_size = %d", triesCount); - int debugInfoOffset = reader.readSmallUint(); + int debugInfoOffset = reader.readInt(); out.annotate(4, "debug_info_off = 0x%x", debugInfoOffset); - if (debugInfoOffset != 0) { + if (debugInfoOffset > 0) { addDebugInfoIdentity(debugInfoOffset, itemIdentity); }