diff options
| author | 2021-05-20 13:15:40 -0700 | |
|---|---|---|
| committer | 2021-05-20 13:30:24 -0700 | |
| commit | ff9a01834e228249d39307c943b1f2e8b4b379a4 (patch) | |
| tree | 579a9dba4876f02b1a85e484db193d90aaf82ea3 | |
| parent | f5098669d78516fd5ec9adfb1fb7dc7b2b2364bc (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.java | 8 |
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); + } } } |