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 3377f614a..41d9ad197 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 @@ public class CommonBinaryParser extends ParserConstants { 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 a50d45d7a..88d0d0ddd 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 class ParserStream { 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); }