From 78c976ad4fe8fc39f7ab66ab39b1aff5525a6e1b Mon Sep 17 00:00:00 2001 From: Jan S Date: Fri, 10 Mar 2023 16:46:31 +0100 Subject: [PATCH] fix(res): resolve manifest decoding error `Expected strings start` (#1797)(PR #1798) --- .../src/main/java/jadx/core/xmlgen/CommonBinaryParser.java | 2 +- jadx-core/src/main/java/jadx/core/xmlgen/ParserStream.java | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) 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); }