Handle invalid debug item offsets more gracefully

This commit is contained in:
Ben Gruver 2015-08-26 13:34:36 -07:00 committed by Connor Tumbleson
parent fd489e990c
commit 52fd17a436
2 changed files with 12 additions and 3 deletions

View File

@ -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

View File

@ -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);
}