From 15e853a1b903b3abbfe2c49c5f2d2e5f1bc1b0d4 Mon Sep 17 00:00:00 2001 From: ykhung Date: Thu, 15 Feb 2024 09:10:33 +0800 Subject: [PATCH] Add a protection for the null UID corner case Test: atest SettingsRoboTests:com.android.settings.fuelgauge.datasaver Fix: 324571889 Change-Id: Ia5a63dc360d4b518f2b86315b40bc2db12f007ed --- .../fuelgauge/datasaver/DynamicDenylistManager.java | 11 ++++++++--- .../datasaver/DynamicDenylistManagerTest.java | 5 ++++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/fuelgauge/datasaver/DynamicDenylistManager.java b/src/com/android/settings/fuelgauge/datasaver/DynamicDenylistManager.java index 49ed63cd3f8..b77d5eb6ddf 100644 --- a/src/com/android/settings/fuelgauge/datasaver/DynamicDenylistManager.java +++ b/src/com/android/settings/fuelgauge/datasaver/DynamicDenylistManager.java @@ -37,13 +37,14 @@ import java.util.List; import java.util.Set; /** A class to dynamically manage per apps {@link NetworkPolicyManager} POLICY_ flags. */ -public final class DynamicDenylistManager { +public class DynamicDenylistManager { private static final String TAG = "DynamicDenylistManager"; private static final String PREF_KEY_MANUAL_DENY = "manual_denylist_preference"; private static final String PREF_KEY_DYNAMIC_DENY = "dynamic_denylist_preference"; - private static DynamicDenylistManager sInstance; + @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) + public static DynamicDenylistManager sInstance = null; private final Context mContext; private final NetworkPolicyManager mNetworkPolicyManager; @@ -115,7 +116,11 @@ public final class DynamicDenylistManager { final ArraySet failedUids = new ArraySet<>(); synchronized (mLock) { // Set new added UIDs into REJECT policy. - for (int uid : denylistTargetUids) { + for (Integer uidInteger : denylistTargetUids) { + if (uidInteger == null) { + continue; + } + final int uid = uidInteger.intValue(); if (!lastDynamicDenylistUids.contains(uid)) { try { mNetworkPolicyManager.setUidPolicy(uid, POLICY_REJECT_METERED_BACKGROUND); diff --git a/tests/robotests/src/com/android/settings/fuelgauge/datasaver/DynamicDenylistManagerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/datasaver/DynamicDenylistManagerTest.java index 0e6f6aabcd4..d642b3096e8 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/datasaver/DynamicDenylistManagerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/datasaver/DynamicDenylistManagerTest.java @@ -177,8 +177,11 @@ public class DynamicDenylistManagerTest { @Test public void setDenylist_uidDeniedAlready_doNothing() { initDynamicDenylistManager(new int[] {FAKE_UID_1_INT}); + final ArraySet uids = new ArraySet<>(); + uids.add(FAKE_UID_1_INT); + uids.add(null); - setDenylist(new ArraySet<>(List.of(FAKE_UID_1_INT))); + setDenylist(uids); verify(mNetworkPolicyManager, never()).setUidPolicy(anyInt(), anyInt()); }