From 7fb3988173049cfec2ed8fde68dfa34b28845544 Mon Sep 17 00:00:00 2001 From: Skylot Date: Fri, 9 Jan 2015 16:13:01 +0300 Subject: [PATCH] resources: skip padding zeroes for UTF-8 string pool --- .../src/main/java/jadx/core/xmlgen/CommonBinaryParser.java | 7 ++++--- jadx-core/src/main/java/jadx/core/xmlgen/ParserStream.java | 6 +----- 2 files changed, 5 insertions(+), 8 deletions(-) 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 d024bc96..8ebf011e 100644 --- a/jadx-core/src/main/java/jadx/core/xmlgen/CommonBinaryParser.java +++ b/jadx-core/src/main/java/jadx/core/xmlgen/CommonBinaryParser.java @@ -27,6 +27,7 @@ public class CommonBinaryParser extends ParserConstants { int[] stylesOffset = is.readInt32Array(styleCount); is.checkPos(start + stringsStart, "Expected strings start"); + long stringsEnd = stylesStart == 0 ? chunkEnd : start + stylesStart; String[] strings = new String[stringCount]; if ((flags & UTF8_FLAG) != 0) { // UTF-8 @@ -34,10 +35,10 @@ public class CommonBinaryParser extends ParserConstants { // is.checkPos(start + stringsStart + stringsOffset[i], "Expected string start"); strings[i] = is.readString8(); } + is.skipToPos(stringsEnd, "Skip string8 padding"); } else { // UTF-16 - long end = stylesStart == 0 ? chunkEnd : start + stylesStart; - byte[] strArray = is.readInt8Array((int) (end - is.getPos())); + byte[] strArray = is.readInt8Array((int) (stringsEnd - is.getPos())); for (int i = 0; i < stringCount; i++) { // don't trust specified string length, read until \0 // stringsOffset can be same for different indexes @@ -51,7 +52,7 @@ public class CommonBinaryParser extends ParserConstants { } } // skip padding zeroes - is.skip(chunkEnd - is.getPos()); + is.skipToPos(chunkEnd, "Skip string pool padding"); return strings; } 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 8c51c990..bc3b79ab 100644 --- a/jadx-core/src/main/java/jadx/core/xmlgen/ParserStream.java +++ b/jadx-core/src/main/java/jadx/core/xmlgen/ParserStream.java @@ -143,12 +143,8 @@ public class ParserStream { long pos = getPos(); if (pos < expectedOffset) { skip(expectedOffset - pos); - pos = getPos(); - } - if (pos != expectedOffset) { - throw new IOException(error + ", expected offset: 0x" + Long.toHexString(expectedOffset) - + ", actual: 0x" + Long.toHexString(pos)); } + checkPos(expectedOffset, error); } public int decodeLength8() throws IOException { -- GitLab