From 6061bdb2ea14d8da6d6f87f276a7cdf1ee216390 Mon Sep 17 00:00:00 2001 From: Guojing Yuan Date: Fri, 30 Sep 2022 18:20:16 +0000 Subject: [PATCH] Catch NameNotFoundException during onPackageModified Fix: 249249607 Test: build & CTS Change-Id: Ic5e241513ce0a45fa204c9bea3c1f79f3e3e93f7 --- .../companion/CompanionDeviceManagerService.java | 3 +++ .../com/android/server/companion/PackageUtils.java | 13 ++++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java index abc49372053e0..a94e4b9b492d0 100644 --- a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java +++ b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java @@ -1152,6 +1152,9 @@ public class CompanionDeviceManagerService extends SystemService { } private void updateSpecialAccessPermissionAsSystem(PackageInfo packageInfo) { + if (packageInfo == null) { + return; + } if (containsEither(packageInfo.requestedPermissions, android.Manifest.permission.RUN_IN_BACKGROUND, android.Manifest.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND)) { diff --git a/services/companion/java/com/android/server/companion/PackageUtils.java b/services/companion/java/com/android/server/companion/PackageUtils.java index f523773033d17..451a7005054fe 100644 --- a/services/companion/java/com/android/server/companion/PackageUtils.java +++ b/services/companion/java/com/android/server/companion/PackageUtils.java @@ -54,12 +54,19 @@ final class PackageUtils { private static final String PROPERTY_PRIMARY_TAG = "android.companion.PROPERTY_PRIMARY_COMPANION_DEVICE_SERVICE"; - static @Nullable PackageInfo getPackageInfo(@NonNull Context context, + @Nullable + static PackageInfo getPackageInfo(@NonNull Context context, @UserIdInt int userId, @NonNull String packageName) { final PackageManager pm = context.getPackageManager(); final PackageInfoFlags flags = PackageInfoFlags.of(GET_PERMISSIONS | GET_CONFIGURATIONS); - return Binder.withCleanCallingIdentity(() -> - pm.getPackageInfoAsUser(packageName, flags , userId)); + return Binder.withCleanCallingIdentity(() -> { + try { + return pm.getPackageInfoAsUser(packageName, flags, userId); + } catch (PackageManager.NameNotFoundException e) { + Slog.e(TAG, "Package [" + packageName + "] is not found."); + return null; + } + }); } static void enforceUsesCompanionDeviceFeature(@NonNull Context context,