summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam Loh <wloh@google.com>2022-08-30 00:11:15 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-11-11 21:37:16 +0000
commit574f3ec0be51306767263d0f96004ae6d4a32e66 (patch)
tree81c25a65f644b1d4a345d49d8730916b1408a517
parent6e09c7e3751a928e63919e844f9ae9acd5477671 (diff)
downloadbase-574f3ec0be51306767263d0f96004ae6d4a32e66.tar.gz
Limit length and number of MIME types you can set
Limit character length of MIME types to 255. If this length is exceeded then a IllegalArugmentException is thrown. The number of MIME types that can be set is also limited to 500 per MIME group with the number of total MIME Groups also limited to 500. A IllegalStateException is thrown if this number is exceeded. Bug: 237291548 Test: Installed and ran POC app from b/237291548 Change-Id: I1d57e674f778cfacdc89225ac3273c432a39af63 Merged-In: I1d57e674f778cfacdc89225ac3273c432a39af63 (cherry picked from commit 3ae3406b9706163073c282a8c4081faa32b606b2) Merged-In: I1d57e674f778cfacdc89225ac3273c432a39af63
-rw-r--r--core/java/android/content/pm/parsing/ParsingPackageImpl.java3
-rw-r--r--services/core/java/com/android/server/pm/PackageSetting.java9
2 files changed, 12 insertions, 0 deletions
diff --git a/core/java/android/content/pm/parsing/ParsingPackageImpl.java b/core/java/android/content/pm/parsing/ParsingPackageImpl.java
index 5a7f21040d0a..a6e1867fce0c 100644
--- a/core/java/android/content/pm/parsing/ParsingPackageImpl.java
+++ b/core/java/android/content/pm/parsing/ParsingPackageImpl.java
@@ -1695,6 +1695,9 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable {
for (int i = component.getIntents().size() - 1; i >= 0; i--) {
IntentFilter filter = component.getIntents().get(i);
for (int groupIndex = filter.countMimeGroups() - 1; groupIndex >= 0; groupIndex--) {
+ if (mimeGroups != null && mimeGroups.size() > 500) {
+ throw new IllegalStateException("Max limit on number of MIME Groups reached");
+ }
mimeGroups = ArrayUtils.add(mimeGroups, filter.getMimeGroup(groupIndex));
}
}
diff --git a/services/core/java/com/android/server/pm/PackageSetting.java b/services/core/java/com/android/server/pm/PackageSetting.java
index 376326264d9c..d8f902a9a086 100644
--- a/services/core/java/com/android/server/pm/PackageSetting.java
+++ b/services/core/java/com/android/server/pm/PackageSetting.java
@@ -328,11 +328,20 @@ public class PackageSetting extends PackageSettingBase {
}
public boolean setMimeGroup(String mimeGroup, List<String> mimeTypes) {
+ for (String mimeType : mimeTypes) {
+ if (mimeType.length() > 255) {
+ throw new IllegalArgumentException("MIME type length exceeds 255 characters");
+ }
+ }
ArraySet<String> oldMimeTypes = getMimeGroupInternal(mimeGroup);
if (oldMimeTypes == null) {
throw new IllegalArgumentException("Unknown MIME group " + mimeGroup
+ " for package " + name);
}
+ if (mimeTypes.size() > 500) {
+ throw new IllegalStateException("Max limit on MIME types for MIME group "
+ + mimeGroup + " exceeded for package " + name);
+ }
ArraySet<String> newMimeTypes = new ArraySet<>(mimeTypes);
boolean hasChanges = !newMimeTypes.equals(oldMimeTypes);