From 6a28621fcc8770a369caaf24d78bea337b23ccc5 Mon Sep 17 00:00:00 2001 From: Connor Tumbleson Date: Thu, 13 Jul 2023 07:27:11 -0400 Subject: [PATCH] fix: skip parsing if chunk end is reached (#3134) --- .../java/brut/androlib/res/decoder/ARSCDecoder.java | 10 ++++++++++ 1 file changed, 10 insertions(+) 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 1c74a6e4c6..dd4fe2017a 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 @@ -305,6 +305,16 @@ private ResType readTableType() throws IOException, AndrolibException { } mMissingResSpecMap.put(i, false); mResId = (mResId & 0xffff0000) | i; + + // As seen in some recent APKs - there are more entries reported than can fit in the chunk. + if (mCountIn.getCount() == mHeader.endPosition) { + int remainingEntries = entryCount - i; + LOGGER.warning(String.format("End of chunk hit. Skipping remaining entries (%d) in type: %s", + remainingEntries, mTypeSpec.getName()) + ); + break; + } + readEntry(readEntryData()); }