summaryrefslogtreecommitdiffstats
path: root/service/java/com/android/server/wifi/WifiMonitor.java
diff options
context:
space:
mode:
authorVinit Deshpande <vinitd@google.com>2015-06-29 11:21:54 -0700
committerVinit Deshpande <vinitd@google.com>2015-06-29 11:59:26 -0700
commitfb80c4e9859161ba3492b79f485b9e554177c8c1 (patch)
treeb952d58f5c2e4d0ec778227ff16b282324328ba6 /service/java/com/android/server/wifi/WifiMonitor.java
parentb334e6ca020be2b0dedf0ff2ad6cd4e698aa2900 (diff)
downloadandroid_frameworks_opt_net_wifi-fb80c4e9859161ba3492b79f485b9e554177c8c1.tar.gz
android_frameworks_opt_net_wifi-fb80c4e9859161ba3492b79f485b9e554177c8c1.tar.bz2
android_frameworks_opt_net_wifi-fb80c4e9859161ba3492b79f485b9e554177c8c1.zip
Fix potential system crash beacuse of bad Wifi parsing
WifiMonitor may throw an exception on some malformed events taking the entire system down. This change gauards against such crash. Bug: 17698782 Change-Id: Ib855419c5ed24ec174889185c4d0b450403778de
Diffstat (limited to 'service/java/com/android/server/wifi/WifiMonitor.java')
-rw-r--r--service/java/com/android/server/wifi/WifiMonitor.java30
1 files changed, 26 insertions, 4 deletions
diff --git a/service/java/com/android/server/wifi/WifiMonitor.java b/service/java/com/android/server/wifi/WifiMonitor.java
index c244d68fc..9758d5769 100644
--- a/service/java/com/android/server/wifi/WifiMonitor.java
+++ b/service/java/com/android/server/wifi/WifiMonitor.java
@@ -1109,14 +1109,34 @@ public class WifiMonitor {
return err;
}
+ WifiP2pDevice getWifiP2pDevice(String dataString) {
+ try {
+ WifiP2pDevice device = new WifiP2pDevice(dataString);
+ return device;
+ } catch (IllegalArgumentException e) {
+ return null;
+ }
+ }
+
+ WifiP2pGroup getWifiP2pGroup(String dataString) {
+ try {
+ WifiP2pGroup group = new WifiP2pGroup(dataString);
+ return group;
+ } catch (IllegalArgumentException e) {
+ return null;
+ }
+ }
+
/**
* Handle p2p events
*/
private void handleP2pEvents(String dataString) {
if (dataString.startsWith(P2P_DEVICE_FOUND_STR)) {
- mStateMachine.sendMessage(P2P_DEVICE_FOUND_EVENT, new WifiP2pDevice(dataString));
+ WifiP2pDevice device = getWifiP2pDevice(dataString);
+ if (device != null) mStateMachine.sendMessage(P2P_DEVICE_FOUND_EVENT, device);
} else if (dataString.startsWith(P2P_DEVICE_LOST_STR)) {
- mStateMachine.sendMessage(P2P_DEVICE_LOST_EVENT, new WifiP2pDevice(dataString));
+ WifiP2pDevice device = getWifiP2pDevice(dataString);
+ if (device != null) mStateMachine.sendMessage(P2P_DEVICE_LOST_EVENT, device);
} else if (dataString.startsWith(P2P_FIND_STOPPED_STR)) {
mStateMachine.sendMessage(P2P_FIND_STOPPED_EVENT);
} else if (dataString.startsWith(P2P_GO_NEG_REQUEST_STR)) {
@@ -1131,9 +1151,11 @@ public class WifiMonitor {
} else if (dataString.startsWith(P2P_GROUP_FORMATION_FAILURE_STR)) {
mStateMachine.sendMessage(P2P_GROUP_FORMATION_FAILURE_EVENT, p2pError(dataString));
} else if (dataString.startsWith(P2P_GROUP_STARTED_STR)) {
- mStateMachine.sendMessage(P2P_GROUP_STARTED_EVENT, new WifiP2pGroup(dataString));
+ WifiP2pGroup group = getWifiP2pGroup(dataString);
+ if (group != null) mStateMachine.sendMessage(P2P_GROUP_STARTED_EVENT, group);
} else if (dataString.startsWith(P2P_GROUP_REMOVED_STR)) {
- mStateMachine.sendMessage(P2P_GROUP_REMOVED_EVENT, new WifiP2pGroup(dataString));
+ WifiP2pGroup group = getWifiP2pGroup(dataString);
+ if (group != null) mStateMachine.sendMessage(P2P_GROUP_REMOVED_EVENT, group);
} else if (dataString.startsWith(P2P_INVITATION_RECEIVED_STR)) {
mStateMachine.sendMessage(P2P_INVITATION_RECEIVED_EVENT,
new WifiP2pGroup(dataString));