diff options
-rw-r--r-- | core/java/android/content/pm/PackageParser.java | 26 | ||||
-rw-r--r-- | services/java/com/android/server/PackageManagerService.java | 8 |
2 files changed, 18 insertions, 16 deletions
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index 54015c9..b798bde 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -201,11 +201,11 @@ public class PackageParser { } pi.activities = new ActivityInfo[num]; } - for (int i=0; i<N; i++) { + for (int i=0, j=0; i<N; i++) { final Activity activity = p.activities.get(i); if (activity.info.enabled || (flags&PackageManager.GET_DISABLED_COMPONENTS) != 0) { - pi.activities[i] = generateActivityInfo(p.activities.get(i), flags); + pi.activities[j++] = generateActivityInfo(p.activities.get(i), flags); } } } @@ -222,11 +222,11 @@ public class PackageParser { } pi.receivers = new ActivityInfo[num]; } - for (int i=0; i<N; i++) { + for (int i=0, j=0; i<N; i++) { final Activity activity = p.receivers.get(i); if (activity.info.enabled || (flags&PackageManager.GET_DISABLED_COMPONENTS) != 0) { - pi.receivers[i] = generateActivityInfo(p.receivers.get(i), flags); + pi.receivers[j++] = generateActivityInfo(p.receivers.get(i), flags); } } } @@ -243,11 +243,11 @@ public class PackageParser { } pi.services = new ServiceInfo[num]; } - for (int i=0; i<N; i++) { + for (int i=0, j=0; i<N; i++) { final Service service = p.services.get(i); if (service.info.enabled || (flags&PackageManager.GET_DISABLED_COMPONENTS) != 0) { - pi.services[i] = generateServiceInfo(p.services.get(i), flags); + pi.services[j++] = generateServiceInfo(p.services.get(i), flags); } } } @@ -264,11 +264,11 @@ public class PackageParser { } pi.providers = new ProviderInfo[num]; } - for (int i=0; i<N; i++) { + for (int i=0, j=0; i<N; i++) { final Provider provider = p.providers.get(i); if (provider.info.enabled || (flags&PackageManager.GET_DISABLED_COMPONENTS) != 0) { - pi.providers[i] = generateProviderInfo(p.providers.get(i), flags); + pi.providers[j++] = generateProviderInfo(p.providers.get(i), flags); } } } @@ -300,12 +300,10 @@ public class PackageParser { } } if ((flags&PackageManager.GET_SIGNATURES) != 0) { - if (p.mSignatures != null) { - int N = p.mSignatures.length; - if (N > 0) { - pi.signatures = new Signature[N]; - System.arraycopy(p.mSignatures, 0, pi.signatures, 0, N); - } + int N = (p.mSignatures != null) ? p.mSignatures.length : 0; + if (N > 0) { + pi.signatures = new Signature[N]; + System.arraycopy(p.mSignatures, 0, pi.signatures, 0, N); } } return pi; diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java index 5f30b3d..a83459e 100644 --- a/services/java/com/android/server/PackageManagerService.java +++ b/services/java/com/android/server/PackageManagerService.java @@ -6344,7 +6344,9 @@ class PackageManagerService extends IPackageManager.Stub { continue; } for (PackageSetting pkg:sus.packages) { - if (pkg.pkg.requestedPermissions.contains(eachPerm)) { + if (pkg.pkg != null && + !pkg.pkg.packageName.equalsIgnoreCase(deletedPs.pkg.packageName) && + pkg.pkg.requestedPermissions.contains(eachPerm)) { used = true; break; } @@ -6359,7 +6361,9 @@ class PackageManagerService extends IPackageManager.Stub { int newGids[] = globalGids; for (String eachPerm : sus.grantedPermissions) { BasePermission bp = mPermissions.get(eachPerm); - newGids = appendInts(newGids, bp.gids); + if (bp != null) { + newGids = appendInts(newGids, bp.gids); + } } sus.gids = newGids; } |