From 4b918ab1a41066ed54ca4c5ecdf78c788622d41c Mon Sep 17 00:00:00 2001 From: Chalard Jean Date: Tue, 19 May 2020 17:22:27 +0900 Subject: [PATCH] Crash bad callers earlier Instead of crashing when parceling the NetworkInfo object, crash at the time the bad call is made. Bug: 145972387 Test: FrameworksNetTests Change-Id: If8b5fd3d7b800c97211bcd16c9a8c5812708d4ab --- framework/src/android/net/NetworkInfo.java | 35 ++++++++++--------- .../server/connectivity/Nat464XlatTest.java | 4 +-- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/framework/src/android/net/NetworkInfo.java b/framework/src/android/net/NetworkInfo.java index bb23494593..433933f841 100644 --- a/framework/src/android/net/NetworkInfo.java +++ b/framework/src/android/net/NetworkInfo.java @@ -179,21 +179,19 @@ public class NetworkInfo implements Parcelable { /** {@hide} */ @UnsupportedAppUsage - public NetworkInfo(NetworkInfo source) { - if (source != null) { - synchronized (source) { - mNetworkType = source.mNetworkType; - mSubtype = source.mSubtype; - mTypeName = source.mTypeName; - mSubtypeName = source.mSubtypeName; - mState = source.mState; - mDetailedState = source.mDetailedState; - mReason = source.mReason; - mExtraInfo = source.mExtraInfo; - mIsFailover = source.mIsFailover; - mIsAvailable = source.mIsAvailable; - mIsRoaming = source.mIsRoaming; - } + public NetworkInfo(@NonNull NetworkInfo source) { + synchronized (source) { + mNetworkType = source.mNetworkType; + mSubtype = source.mSubtype; + mTypeName = source.mTypeName; + mSubtypeName = source.mSubtypeName; + mState = source.mState; + mDetailedState = source.mDetailedState; + mReason = source.mReason; + mExtraInfo = source.mExtraInfo; + mIsFailover = source.mIsFailover; + mIsAvailable = source.mIsAvailable; + mIsRoaming = source.mIsRoaming; } } @@ -479,7 +477,7 @@ public class NetworkInfo implements Parcelable { * @param detailedState the {@link DetailedState}. * @param reason a {@code String} indicating the reason for the state change, * if one was supplied. May be {@code null}. - * @param extraInfo an optional {@code String} providing addditional network state + * @param extraInfo an optional {@code String} providing additional network state * information passed up from the lower networking layers. * @deprecated Use {@link NetworkCapabilities} instead. */ @@ -491,6 +489,11 @@ public class NetworkInfo implements Parcelable { this.mState = stateMap.get(detailedState); this.mReason = reason; this.mExtraInfo = extraInfo; + // Catch both the case where detailedState is null and the case where it's some + // unknown value + if (null == mState) { + throw new NullPointerException("Unknown DetailedState : " + detailedState); + } } } diff --git a/tests/unit/java/com/android/server/connectivity/Nat464XlatTest.java b/tests/unit/java/com/android/server/connectivity/Nat464XlatTest.java index f358726f69..aa4c4e37f5 100644 --- a/tests/unit/java/com/android/server/connectivity/Nat464XlatTest.java +++ b/tests/unit/java/com/android/server/connectivity/Nat464XlatTest.java @@ -109,8 +109,8 @@ public class Nat464XlatTest { mNai.linkProperties = new LinkProperties(); mNai.linkProperties.setInterfaceName(BASE_IFACE); - mNai.networkInfo = new NetworkInfo(null); - mNai.networkInfo.setType(ConnectivityManager.TYPE_WIFI); + mNai.networkInfo = new NetworkInfo(ConnectivityManager.TYPE_WIFI, 0 /* subtype */, + null /* typeName */, null /* subtypeName */); mNai.networkCapabilities = new NetworkCapabilities(); markNetworkConnected(); when(mNai.connService()).thenReturn(mConnectivity);