From 73c43764d771dbec22596057cc9fc70be9f8e3d9 Mon Sep 17 00:00:00 2001 From: Connor Tumbleson Date: Wed, 12 Jul 2023 07:28:24 -0400 Subject: [PATCH] fix: properly parse localeNumberingSystem --- .../java/brut/androlib/res/decoder/ARSCDecoder.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ARSCDecoder.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ARSCDecoder.java index c131f4a733..1c74a6e4c6 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ARSCDecoder.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ARSCDecoder.java @@ -500,13 +500,14 @@ private ResConfigFlags readConfigFlags() throws IOException, AndrolibException { if (size >= 52) { screenLayout2 = mIn.readByte(); colorMode = mIn.readByte(); - mIn.skipBytes(2); // reserved padding + mIn.skipBytes(2); // screenConfigPad2 read = 52; } - if (size >= 56) { - mIn.skipBytes(4); - read = 56; + if (size > 52) { + int length = size - read; + mIn.skipBytes(length); // localeNumberingSystem + read += length; } int exceedingSize = size - KNOWN_CONFIG_BYTES; @@ -557,7 +558,7 @@ private char[] unpackLanguageOrRegion(byte in0, byte in1, char base) { private String readScriptOrVariantChar(int length) throws IOException { StringBuilder string = new StringBuilder(16); - while(length-- != 0) { + while (length-- != 0) { short ch = mIn.readByte(); if (ch == 0) { break; @@ -641,7 +642,7 @@ private void checkChunkType(int expectedType) throws AndrolibException { private final static short ENTRY_FLAG_PUBLIC = 0x0002; private final static short ENTRY_FLAG_WEAK = 0x0004; - private static final int KNOWN_CONFIG_BYTES = 56; + private static final int KNOWN_CONFIG_BYTES = 64; private static final Logger LOGGER = Logger.getLogger(ARSCDecoder.class.getName()); }