diff options
-rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index d2a627e..3a7dc99 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -3783,21 +3783,25 @@ public class PackageManagerService extends IPackageManager.Stub { } else { pi = generatePackageInfoFromSettingsLPw(ps.name, flags, userId); } - if ((flags&PackageManager.GET_PERMISSIONS) == 0) { - if (numMatch == permissions.length) { - pi.requestedPermissions = permissions; - } else { - pi.requestedPermissions = new String[numMatch]; - numMatch = 0; - for (int i=0; i<permissions.length; i++) { - if (tmp[i]) { - pi.requestedPermissions[numMatch] = permissions[i]; - numMatch++; + // The above might return null in cases of uninstalled apps or install-state + // skew across users/profiles. + if (pi != null) { + if ((flags&PackageManager.GET_PERMISSIONS) == 0) { + if (numMatch == permissions.length) { + pi.requestedPermissions = permissions; + } else { + pi.requestedPermissions = new String[numMatch]; + numMatch = 0; + for (int i=0; i<permissions.length; i++) { + if (tmp[i]) { + pi.requestedPermissions[numMatch] = permissions[i]; + numMatch++; + } } } } + list.add(pi); } - list.add(pi); } @Override |