diff options
| author | 2014-09-05 14:52:26 -0700 | |
|---|---|---|
| committer | 2014-09-05 21:58:32 +0000 | |
| commit | 30f349d2ef3f2220c1d478b0faff4c38eaadf12c (patch) | |
| tree | d924fb50bce8008c23b7709c3fb2328352f68ecd | |
| parent | 69dd40d08a164d5c357442733cf291719dfe94e8 (diff) | |
Don't crash in addPackageHoldingPermissions()...
...in cases involving uninstalled apps, or apps whose install state
varies across different users.
Bug 17398315
Change-Id: I7297d82f8bf5d49c50a7fd53d795a706bf2d2313
| -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 d2a627e32137..3a7dc99afa8c 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 |