diff options
author | Christopher Tate <ctate@google.com> | 2013-10-30 12:22:31 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2013-10-30 12:22:31 -0700 |
commit | bcc0bd4cd7b6c2568afafb56ea64408bbf5f9dba (patch) | |
tree | b7fcb8e2fee04ccfa600985e4bbc45a1f29c14ae /services/java/com/android/server/pm/PackageManagerService.java | |
parent | ac132888d0d6362149fffcfda1a8b8aaf4ac0c1f (diff) | |
parent | 9dcfcc845d5fdbedbbb41e0d22dd3e16a6a53fe5 (diff) |
am 9dcfcc84: am 19427156: Merge "Don\'t crash when preferred activity settings are malformed" into klp-dev
* commit '9dcfcc845d5fdbedbbb41e0d22dd3e16a6a53fe5':
Don't crash when preferred activity settings are malformed
Diffstat (limited to 'services/java/com/android/server/pm/PackageManagerService.java')
-rwxr-xr-x | services/java/com/android/server/pm/PackageManagerService.java | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java index c3c088bb5761..fdeeebd67a5d 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<PreferredActivity>(); } |