Add a protection for the null UID corner case

Test: atest SettingsRoboTests:com.android.settings.fuelgauge.datasaver
Fix: 324571889
Change-Id: Ia5a63dc360d4b518f2b86315b40bc2db12f007ed
This commit is contained in:
ykhung
2024-02-15 09:10:33 +08:00
committed by YK Hung
parent 371c96cbc7
commit 15e853a1b9
2 changed files with 12 additions and 4 deletions

View File

@@ -37,13 +37,14 @@ import java.util.List;
import java.util.Set; import java.util.Set;
/** A class to dynamically manage per apps {@link NetworkPolicyManager} POLICY_ flags. */ /** 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 TAG = "DynamicDenylistManager";
private static final String PREF_KEY_MANUAL_DENY = "manual_denylist_preference"; private static final String PREF_KEY_MANUAL_DENY = "manual_denylist_preference";
private static final String PREF_KEY_DYNAMIC_DENY = "dynamic_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 Context mContext;
private final NetworkPolicyManager mNetworkPolicyManager; private final NetworkPolicyManager mNetworkPolicyManager;
@@ -115,7 +116,11 @@ public final class DynamicDenylistManager {
final ArraySet<Integer> failedUids = new ArraySet<>(); final ArraySet<Integer> failedUids = new ArraySet<>();
synchronized (mLock) { synchronized (mLock) {
// Set new added UIDs into REJECT policy. // 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)) { if (!lastDynamicDenylistUids.contains(uid)) {
try { try {
mNetworkPolicyManager.setUidPolicy(uid, POLICY_REJECT_METERED_BACKGROUND); mNetworkPolicyManager.setUidPolicy(uid, POLICY_REJECT_METERED_BACKGROUND);

View File

@@ -177,8 +177,11 @@ public class DynamicDenylistManagerTest {
@Test @Test
public void setDenylist_uidDeniedAlready_doNothing() { public void setDenylist_uidDeniedAlready_doNothing() {
initDynamicDenylistManager(new int[] {FAKE_UID_1_INT}); 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()); verify(mNetworkPolicyManager, never()).setUidPolicy(anyInt(), anyInt());
} }