From 20b4d846edafeaacf0da2c810f511c236fdbd187 Mon Sep 17 00:00:00 2001 From: Annie Meng Date: Fri, 18 May 2018 15:00:49 +0100 Subject: Fix NPE in restoring network policies When backing up network policies, we write null for policies that are null or are inferred. When restoring, this sends null policies to be set which results in a NPE. Bug: 79961560 Test: 1) atest NetworkPolicyManagerServiceTest 2) Manual: adb restore using backup set with null policies does not crash Change-Id: I450685e38acae0658ea984b86ca8b17ca27a71a6 --- .../android/server/net/NetworkPolicyManagerService.java | 3 +++ .../android/server/NetworkPolicyManagerServiceTest.java | 14 ++++++++++++++ 2 files changed, 17 insertions(+) (limited to 'services') diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java index 5bd7c0b9ba9c..ab482bb2da98 100644 --- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java @@ -2706,6 +2706,9 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { private void normalizePoliciesNL(NetworkPolicy[] policies) { mNetworkPolicy.clear(); for (NetworkPolicy policy : policies) { + if (policy == null) { + continue; + } // When two normalized templates conflict, prefer the most // restrictive policy policy.template = NetworkTemplate.normalize(policy.template, mMergedSubscriberIds); diff --git a/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java index b4dc94192f24..17babe9635be 100644 --- a/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java @@ -1628,6 +1628,20 @@ public class NetworkPolicyManagerServiceTest { } } + /** + * Test that policy set of {null, NetworkPolicy, null} does not crash and restores the valid + * NetworkPolicy. + */ + @Test + public void testSetNetworkPolicies_withNullPolicies_doesNotThrow() { + NetworkPolicy[] policies = new NetworkPolicy[3]; + policies[1] = buildDefaultFakeMobilePolicy(); + setNetworkPolicies(policies); + + assertNetworkPolicyEquals(DEFAULT_CYCLE_DAY, mDefaultWarningBytes, mDefaultLimitBytes, + true); + } + private SubscriptionPlan buildMonthlyDataPlan(ZonedDateTime start, long limitBytes) { return SubscriptionPlan.Builder .createRecurringMonthly(start) -- cgit v1.2.3-59-g8ed1b