diff options
author | Purushottam Kushwaha <quic_pkushwah@quicinc.com> | 2020-09-01 11:19:37 +0530 |
---|---|---|
committer | Roshan Pius <rpius@google.com> | 2020-09-02 17:09:11 +0000 |
commit | e4e5a49dbe4ca726c51d9350fa61088c2bb23d8a (patch) | |
tree | 8b00aaa6034cd50d6f87acf6bdba4a1c0b834cf4 | |
parent | edc209e114cb84977b592bd4ef2fe8203a68951c (diff) |
NPE: Add null check for getConfiguredNetwork()
During CMD_RESET_SIM_NETWORKS , WifiConfiguration get via
getConfiguredNetwork() shall be guarded with null to avoid Null
Pointer Exception.
Bug: 167345712
Test: atest com.android.server.wifi
(cherry-picked from 75f843c66829afc8920f3cf6302651f753985cba)
(cherry picked from commit 36f987c05103b123e40f65a792d81e7c3a1710d3)
Merged-In: I612817342a9c541d51c8c022f7c09b9462e39d21
Change-Id: I612817342a9c541d51c8c022f7c09b9462e39d21
-rw-r--r-- | service/java/com/android/server/wifi/ClientModeImpl.java | 5 | ||||
-rw-r--r-- | tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java | 17 |
2 files changed, 20 insertions, 2 deletions
diff --git a/service/java/com/android/server/wifi/ClientModeImpl.java b/service/java/com/android/server/wifi/ClientModeImpl.java index 95983096a..9f4c41f83 100644 --- a/service/java/com/android/server/wifi/ClientModeImpl.java +++ b/service/java/com/android/server/wifi/ClientModeImpl.java @@ -5013,11 +5013,12 @@ public class ClientModeImpl extends StateMachine { && mLastNetworkId != WifiConfiguration.INVALID_NETWORK_ID) { WifiConfiguration config = mWifiConfigManager.getConfiguredNetwork(mLastNetworkId); - if ((message.arg1 == RESET_SIM_REASON_DEFAULT_DATA_SIM_CHANGED + if (config != null + && ((message.arg1 == RESET_SIM_REASON_DEFAULT_DATA_SIM_CHANGED && config.carrierId != TelephonyManager.UNKNOWN_CARRIER_ID) || (config.enterpriseConfig != null && config.enterpriseConfig.isAuthenticationSimBased() - && !mWifiCarrierInfoManager.isSimPresent(mLastSubId))) { + && !mWifiCarrierInfoManager.isSimPresent(mLastSubId)))) { mWifiMetrics.logStaEvent(StaEvent.TYPE_FRAMEWORK_DISCONNECT, StaEvent.DISCONNECT_RESET_SIM_NETWORKS); // remove local PMKSA cache in framework diff --git a/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java b/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java index a9d7f0ce2..fd1ef1718 100644 --- a/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java +++ b/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java @@ -1114,6 +1114,23 @@ public class ClientModeImplTest extends WifiBaseTest { } /** + * When the SIM card was removed, if the current wifi connection is using it, the connection + * should be disconnected, otherwise, the connection shouldn't be impacted. + */ + @Test + public void testResetSimWhenConnectedSimRemovedAfterNetworkRemoval() throws Exception { + setupEapSimConnection(); + doReturn(false).when(mWifiCarrierInfoManager).isSimPresent(eq(DATA_SUBID)); + when(mWifiConfigManager.getConfiguredNetwork(anyInt())).thenReturn(null); + mCmi.sendMessage(ClientModeImpl.CMD_RESET_SIM_NETWORKS, + ClientModeImpl.RESET_SIM_REASON_SIM_REMOVED); + mLooper.dispatchAll(); + + verify(mSimRequiredNotifier, never()).showSimRequiredNotification(any(), any()); + assertEquals("ObtainingIpState", getCurrentState().getName()); + } + + /** * When the default data SIM is changed, if the current wifi connection is carrier wifi, * the connection should be disconnected. */ |