diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index 54015c970bb4b..b798bde023386 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 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 5f30b3d45b482..a83459edaba56 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; }