From 9c341963ac91b861f407ffec7a73e180de845bad 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 Merged-In: Ia5387ca2ce7c3fcbd04dc7fbff5266f7bcc71694 (cherry picked from commit 2091bd9059d1d24f8c6bd1cd345361f185cab1ea) --- 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 18bbb07da4..9ff7ebee6d 100644 --- a/core/java/android/net/NetworkCapabilities.java +++ b/core/java/android/net/NetworkCapabilities.java @@ -947,12 +947,19 @@ 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 */ @NonNull 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 db3372de16..316a83adf4 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();