diff options
| author | 2025-02-12 09:13:13 -0800 | |
|---|---|---|
| committer | 2025-02-12 09:13:13 -0800 | |
| commit | 36c9695d234e27bf763cc0eeb71b17c40b71ca31 (patch) | |
| tree | 0ff52c35701fa50df0056f8b5b388d6d5d931838 | |
| parent | 7394d01c2035e378a21a247dd18af9a9138f9de4 (diff) | |
| parent | 5771a6cc76a23ab134361013d29ef9cb4ba9b1ac (diff) | |
Merge "filter flagged xml elements" into main
| -rw-r--r-- | core/java/android/content/res/XmlBlock.java | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/core/java/android/content/res/XmlBlock.java b/core/java/android/content/res/XmlBlock.java index 40c532498fbc..2ead17588be4 100644 --- a/core/java/android/content/res/XmlBlock.java +++ b/core/java/android/content/res/XmlBlock.java @@ -29,6 +29,8 @@ import android.ravenwood.annotation.RavenwoodKeepWholeClass; import android.util.TypedValue; import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.pm.pkg.component.AconfigFlags; +import com.android.internal.pm.pkg.parsing.ParsingPackageUtils; import com.android.internal.util.XmlUtils; import dalvik.annotation.optimization.CriticalNative; @@ -50,6 +52,7 @@ import java.io.Reader; @RavenwoodClassLoadHook(RavenwoodClassLoadHook.LIBANDROID_LOADING_HOOK) public final class XmlBlock implements AutoCloseable { private static final boolean DEBUG=false; + public static final String ANDROID_RESOURCES = "http://schemas.android.com/apk/res/android"; @UnsupportedAppUsage public XmlBlock(byte[] data) { @@ -343,6 +346,23 @@ public final class XmlBlock implements AutoCloseable { if (ev == ERROR_BAD_DOCUMENT) { throw new XmlPullParserException("Corrupt XML binary file"); } + if (Flags.layoutReadwriteFlags() && ev == START_TAG) { + AconfigFlags flags = ParsingPackageUtils.getAconfigFlags(); + if (flags.skipCurrentElement(/* pkg= */ null, this)) { + int depth = 1; + while (depth > 0) { + int ev2 = nativeNext(mParseState); + if (ev2 == ERROR_BAD_DOCUMENT) { + throw new XmlPullParserException("Corrupt XML binary file"); + } else if (ev2 == START_TAG) { + depth++; + } else if (ev2 == END_TAG) { + depth--; + } + } + return next(); + } + } if (mDecNextDepth) { mDepth--; mDecNextDepth = false; |