Limit length and number of MIME types you can set am: 3ae3406b97 am: d47de97f03 am: bcd7713fad

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19785208

Change-Id: I3f8c57a817eca0938b9d88b44fa4f3488f1c4362
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/core/java/android/content/pm/parsing/ParsingPackageImpl.java b/core/java/android/content/pm/parsing/ParsingPackageImpl.java
index 5a7f210..a6e1867 100644
--- a/core/java/android/content/pm/parsing/ParsingPackageImpl.java
+++ b/core/java/android/content/pm/parsing/ParsingPackageImpl.java
@@ -1695,6 +1695,9 @@
         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 3763262..d8f902a9 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 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);