From 7d95c19bb1af14535cff815ac83c923cfee20368 Mon Sep 17 00:00:00 2001 From: Alex Buynytskyy Date: Tue, 30 Aug 2022 14:18:16 -0700 Subject: [PATCH] Fix for: NPE when intent.component set to ResolverActivity. Bug: 244294361 Fixes: 244294361 Test: atest PackageManagerTest Change-Id: I14fa8d8a9bb5020ebdf1f4b761b15e1d2f938920 --- .../server/pm/PackageManagerServiceUtils.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java index b7ab381a08b5d..f466655914c8c 100644 --- a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java +++ b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java @@ -41,6 +41,7 @@ import android.compat.annotation.ChangeId; import android.compat.annotation.EnabledSince; import android.content.Context; import android.content.Intent; +import android.content.IntentFilter; import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.ComponentInfo; @@ -1125,13 +1126,18 @@ public class PackageManagerServiceUtils { throw new IllegalArgumentException("Unsupported component type"); } - if (comp.getIntents().isEmpty()) { + if (comp == null || comp.getIntents().isEmpty()) { continue; } - final boolean match = comp.getIntents().stream().anyMatch( - f -> IntentResolver.intentMatchesFilter(f.getIntentFilter(), intent, - resolvedType)); + boolean match = false; + for (int j = 0, size = comp.getIntents().size(); j < size; ++j) { + IntentFilter intentFilter = comp.getIntents().get(j).getIntentFilter(); + if (IntentResolver.intentMatchesFilter(intentFilter, intent, resolvedType)) { + match = true; + break; + } + } if (!match) { Slog.w(TAG, "Intent does not match component's intent filter: " + intent); Slog.w(TAG, "Access blocked: " + comp.getComponentName());