From 81a7e1e4345edfebf58086756e1cc53b0b776c27 Mon Sep 17 00:00:00 2001 From: Connor Tumbleson Date: Sun, 27 Aug 2023 15:06:58 -0400 Subject: [PATCH] fix: only mark as sparse if intended application (#3299) --- .../src/main/java/brut/androlib/res/decoder/ARSCDecoder.java | 4 +++- .../src/test/java/brut/androlib/decode/SparseFlagTest.java | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) 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 16a33951..38c20897 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 @@ -270,7 +270,9 @@ public class ARSCDecoder { mHeader.checkForUnreadHeader(mIn); - if ((typeFlags & 0x01) != 0) { + // Be sure we don't poison mResTable by marking the application as sparse + // Only flag the ResTable as sparse if the main package is not loaded. + if ((typeFlags & 0x01) != 0 && !mResTable.isMainPkgLoaded()) { mResTable.setSparseResources(true); } diff --git a/brut.apktool/apktool-lib/src/test/java/brut/androlib/decode/SparseFlagTest.java b/brut.apktool/apktool-lib/src/test/java/brut/androlib/decode/SparseFlagTest.java index 276fbf63..c3959250 100644 --- a/brut.apktool/apktool-lib/src/test/java/brut/androlib/decode/SparseFlagTest.java +++ b/brut.apktool/apktool-lib/src/test/java/brut/androlib/decode/SparseFlagTest.java @@ -54,6 +54,7 @@ public class SparseFlagTest extends BaseTest { LOGGER.info("Decoding sparse.apk..."); Config config = Config.getDefaultConfig(); + config.frameworkTag = "issue-3298"; ApkDecoder apkDecoder = new ApkDecoder(config, testApk); ApkInfo apkInfo = apkDecoder.decode(sTestNewDir); @@ -70,6 +71,7 @@ public class SparseFlagTest extends BaseTest { LOGGER.info("Decoding not-sparse.apk..."); Config config = Config.getDefaultConfig(); + config.frameworkTag = "issue-3298"; ApkDecoder apkDecoder = new ApkDecoder(config, testApk); ApkInfo apkInfo = apkDecoder.decode(sTestNewDir);