From e202cad1abd3ef63f6226c9164b74cc4368df135 Mon Sep 17 00:00:00 2001 From: Christopher Tate Date: Tue, 29 Oct 2013 17:42:26 -0700 Subject: [PATCH] Don't crash when preferred activity settings are malformed We also now ignore attempts to set preferred resolutions with intent filters for which no actions are defined. Bug 11392870 Change-Id: If0d0b37bf01b59463985441edfc2bddd070bfc2a --- .../java/com/android/server/pm/PackageManagerService.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java index a781d5f9e32bc..3d6b3c92dc1a3 100755 --- a/services/java/com/android/server/pm/PackageManagerService.java +++ b/services/java/com/android/server/pm/PackageManagerService.java @@ -9965,6 +9965,10 @@ public class PackageManagerService extends IPackageManager.Stub { // writer int callingUid = Binder.getCallingUid(); enforceCrossUserPermission(callingUid, userId, true, "add preferred activity"); + if (filter.countActions() == 0) { + Slog.w(TAG, "Cannot set a preferred activity with no filter actions"); + return; + } synchronized (mPackages) { if (mContext.checkCallingOrSelfPermission( android.Manifest.permission.SET_PREFERRED_APPLICATIONS) @@ -10024,7 +10028,9 @@ public class PackageManagerService extends IPackageManager.Stub { String category = filter.getCategory(0); while (it.hasNext()) { PreferredActivity pa = it.next(); - if (pa.getAction(0).equals(action) && pa.getCategory(0).equals(category)) { + if ((pa.countActions() == 0) || (pa.countCategories() == 0) + || (pa.getAction(0).equals(action) + && pa.getCategory(0).equals(category))) { if (removed == null) { removed = new ArrayList(); }