From ff9a01834e228249d39307c943b1f2e8b4b379a4 Mon Sep 17 00:00:00 2001 From: Lee Shombert Date: Thu, 20 May 2021 13:15:40 -0700 Subject: [PATCH] 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 --- .../java/com/android/server/pm/PackageManagerService.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 01c89b5da715f..629418e865698 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); + } } }