diff --git a/jadx-core/src/main/java/jadx/core/xmlgen/CommonBinaryParser.java b/jadx-core/src/main/java/jadx/core/xmlgen/CommonBinaryParser.java index 3377f614a49..41d9ad197c2 100644 --- a/jadx-core/src/main/java/jadx/core/xmlgen/CommonBinaryParser.java +++ b/jadx-core/src/main/java/jadx/core/xmlgen/CommonBinaryParser.java @@ -26,7 +26,7 @@ protected String[] parseStringPoolNoType() throws IOException { int[] stringsOffset = is.readInt32Array(stringCount); int[] stylesOffset = is.readInt32Array(styleCount); - is.checkPos(start + stringsStart, "Expected strings start"); + is.skipToPos(start + stringsStart, "Expected strings start"); String[] strings = new String[stringCount]; byte[] strData = is.readInt8Array((int) (chunkEnd - is.getPos())); if ((flags & UTF8_FLAG) != 0) { diff --git a/jadx-core/src/main/java/jadx/core/xmlgen/ParserStream.java b/jadx-core/src/main/java/jadx/core/xmlgen/ParserStream.java index a50d45d7a03..88d0d0ddd29 100644 --- a/jadx-core/src/main/java/jadx/core/xmlgen/ParserStream.java +++ b/jadx-core/src/main/java/jadx/core/xmlgen/ParserStream.java @@ -127,6 +127,10 @@ public void checkPos(long expectedOffset, String error) throws IOException { public void skipToPos(long expectedOffset, String error) throws IOException { long pos = getPos(); + if (pos > expectedOffset) { + throw new IOException(error + ", expected offset not reachable: 0x" + Long.toHexString(expectedOffset) + + ", actual: 0x" + Long.toHexString(getPos())); + } if (pos < expectedOffset) { skip(expectedOffset - pos); }