From ec5a0cb0ffd2322baa3878fdacfe3352c7748dce Mon Sep 17 00:00:00 2001 From: Cody Kesting Date: Tue, 24 Mar 2020 11:53:30 -0700 Subject: [PATCH] Sort administrator UIDs for NetworkCapabilities. Administrator UIDs stored in NetworkCapabilities should be sorted. This allows for easier equals checks and hashCode computation. Additionally, duplicate UIDs should be prevented. Bug: 147903575 Test: atest FrameworksNetTests Change-Id: Ia5387ca2ce7c3fcbd04dc7fbff5266f7bcc71694 --- core/java/android/net/NetworkCapabilities.java | 7 +++++++ .../android/net/NetworkCapabilitiesTest.java | 17 +++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/core/java/android/net/NetworkCapabilities.java b/core/java/android/net/NetworkCapabilities.java index 1fc28bda06..6f9378b574 100644 --- a/core/java/android/net/NetworkCapabilities.java +++ b/core/java/android/net/NetworkCapabilities.java @@ -909,6 +909,7 @@ public final class NetworkCapabilities implements Parcelable { *

The administrator UIDs are set by network agents. * * @param administratorUids the UIDs to be set as administrators of this Network. + * @throws IllegalArgumentException if duplicate UIDs are contained in administratorUids * @see #mAdministratorUids * @hide */ @@ -916,6 +917,12 @@ public final class NetworkCapabilities implements Parcelable { @SystemApi public NetworkCapabilities setAdministratorUids(@NonNull final int[] administratorUids) { mAdministratorUids = Arrays.copyOf(administratorUids, administratorUids.length); + Arrays.sort(mAdministratorUids); + for (int i = 0; i < mAdministratorUids.length - 1; i++) { + if (mAdministratorUids[i] >= mAdministratorUids[i + 1]) { + throw new IllegalArgumentException("All administrator UIDs must be unique"); + } + } return this; } diff --git a/tests/net/common/java/android/net/NetworkCapabilitiesTest.java b/tests/net/common/java/android/net/NetworkCapabilitiesTest.java index 0751218809..9a8a3e01c1 100644 --- a/tests/net/common/java/android/net/NetworkCapabilitiesTest.java +++ b/tests/net/common/java/android/net/NetworkCapabilitiesTest.java @@ -441,6 +441,23 @@ public class NetworkCapabilitiesTest { return range; } + @Test + public void testSetAdministratorUids() { + NetworkCapabilities nc = + new NetworkCapabilities().setAdministratorUids(new int[] {2, 1, 3}); + + assertArrayEquals(new int[] {1, 2, 3}, nc.getAdministratorUids()); + } + + @Test + public void testSetAdministratorUidsWithDuplicates() { + try { + new NetworkCapabilities().setAdministratorUids(new int[] {1, 1}); + fail("Expected IllegalArgumentException for duplicate uids"); + } catch (IllegalArgumentException expected) { + } + } + @Test public void testCombineCapabilities() { NetworkCapabilities nc1 = new NetworkCapabilities();