From 377ded0fce449f77cd7efae35f97722cdab52693 Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Sun, 10 Jan 2016 13:15:41 -0700 Subject: [PATCH] Fix NPE when UID has no packages. Bug: 25224723 Change-Id: I637214666a1f02bd23474c27a285eea9152cfa9d --- core/java/android/content/pm/PackageManager.java | 4 ++-- .../android/server/net/NetworkPolicyManagerService.java | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index c325d3d356ccf..5a9a67c35b889 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -3115,7 +3115,7 @@ public abstract class PackageManager { * @return Returns an array of one or more packages assigned to the user * id, or null if there are no known packages with the given id. */ - public abstract String[] getPackagesForUid(int uid); + public abstract @Nullable String[] getPackagesForUid(int uid); /** * Retrieve the official name associated with a user id. This name is @@ -3128,7 +3128,7 @@ public abstract class PackageManager { * @return Returns a unique name for the given user id, or null if the * user id is not currently assigned. */ - public abstract String getNameForUid(int uid); + public abstract @Nullable String getNameForUid(int uid); /** * Return the user id associated with a shared user name. Multiple diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java index 4325efdb77f3c..47643006d4edb 100644 --- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java @@ -2234,9 +2234,11 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { final String[] packages = mContext.getPackageManager().getPackagesForUid(uid); final int userId = UserHandle.getUserId(uid); - for (String packageName : packages) { - if (!mUsageStats.isAppIdle(packageName, uid, userId)) { - return false; + if (!ArrayUtils.isEmpty(packages)) { + for (String packageName : packages) { + if (!mUsageStats.isAppIdle(packageName, uid, userId)) { + return false; + } } } return true;