summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Lee Shombert <shombert@google.com> 2021-05-20 13:15:40 -0700
committer Lee Shombert <shombert@google.com> 2021-05-20 13:30:24 -0700
commitff9a01834e228249d39307c943b1f2e8b4b379a4 (patch)
tree579a9dba4876f02b1a85e484db193d90aaf82ea3
parentf5098669d78516fd5ec9adfb1fb7dc7b2b2364bc (diff)
Test for null package in isEnabledAndMatches()
Bug: 188174037 Avoid an NPE is isEnabledAndMatches() by returning false if no package is found matching the component name. This does not address the more general problem uncovered by the bug, which is that a thread that has multiple calls into PM on the stack might end up executing with different snapshots. Test: atest * CtsContentTestCases Change-Id: Ib4e929a62edf3393e0177f5d85c9b3fe1e0697d8
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java8
1 files changed, 7 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 01c89b5da715..629418e86569 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -26543,11 +26543,17 @@ public class PackageManagerService extends IPackageManager.Stub
}
}
+ // TODO(188814480) should be able to remove the NPE check when snapshot
+ // "recursion" is fixed.
@Override
public boolean isEnabledAndMatches(ParsedMainComponent component, int flags, int userId) {
synchronized (mLock) {
AndroidPackage pkg = getPackage(component.getPackageName());
- return mSettings.isEnabledAndMatchLPr(pkg, component, flags, userId);
+ if (pkg == null) {
+ return false;
+ } else {
+ return mSettings.isEnabledAndMatchLPr(pkg, component, flags, userId);
+ }
}
}