diff options
author | hashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-28 05:42:07 +0000 |
---|---|---|
committer | hashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-28 05:42:07 +0000 |
commit | 5b62b3109c123b99ee793284e0dd8cf2610273e1 (patch) | |
tree | 7cf3fcc83f47777d621e2a67c31ce6feb855a4f0 | |
parent | f02bc771ef62584d8ace4c02dba719ef57d51af0 (diff) | |
download | chromium_src-5b62b3109c123b99ee793284e0dd8cf2610273e1.zip chromium_src-5b62b3109c123b99ee793284e0dd8cf2610273e1.tar.gz chromium_src-5b62b3109c123b99ee793284e0dd8cf2610273e1.tar.bz2 |
Do CHECK before dangerous cast in chromeos::NetworkLibrary
Invalid casts lead to memory corruption and mysterious crash in tcmalloc, let us abort before making trouble.
BUG=128059
TEST=build
Review URL: https://chromiumcodereview.appspot.com/10451035
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@139222 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/chromeos/cros/native_network_parser.cc | 16 | ||||
-rw-r--r-- | chrome/browser/chromeos/cros/network_library.cc | 2 | ||||
-rw-r--r-- | chrome/browser/chromeos/cros/network_library_impl_cros.cc | 18 |
3 files changed, 19 insertions, 17 deletions
diff --git a/chrome/browser/chromeos/cros/native_network_parser.cc b/chrome/browser/chromeos/cros/native_network_parser.cc index 779ef84..537028d 100644 --- a/chrome/browser/chromeos/cros/native_network_parser.cc +++ b/chrome/browser/chromeos/cros/native_network_parser.cc @@ -825,8 +825,10 @@ NativeWirelessNetworkParser::~NativeWirelessNetworkParser() {} bool NativeWirelessNetworkParser::ParseValue(PropertyIndex index, const base::Value& value, Network* network) { - DCHECK_NE(TYPE_ETHERNET, network->type()); - DCHECK_NE(TYPE_VPN, network->type()); + CHECK(network->type() == TYPE_WIFI || + network->type() == TYPE_WIMAX || + network->type() == TYPE_BLUETOOTH || + network->type() == TYPE_CELLULAR); WirelessNetwork* wireless_network = static_cast<WirelessNetwork*>(network); switch (index) { case PROPERTY_INDEX_SIGNAL_STRENGTH: { @@ -851,7 +853,7 @@ NativeCellularNetworkParser::~NativeCellularNetworkParser() {} bool NativeCellularNetworkParser::ParseValue(PropertyIndex index, const base::Value& value, Network* network) { - DCHECK_EQ(TYPE_CELLULAR, network->type()); + CHECK_EQ(TYPE_CELLULAR, network->type()); CellularNetwork* cellular_network = static_cast<CellularNetwork*>(network); switch (index) { case PROPERTY_INDEX_ACTIVATION_STATE: { @@ -1036,7 +1038,7 @@ NativeWimaxNetworkParser::~NativeWimaxNetworkParser() {} bool NativeWimaxNetworkParser::ParseValue(PropertyIndex index, const base::Value& value, Network* network) { - DCHECK(TYPE_WIMAX == network->type()); + CHECK_EQ(TYPE_WIMAX, network->type()); WimaxNetwork* wimax_network = static_cast<WimaxNetwork*>(network); switch (index) { case PROPERTY_INDEX_PASSPHRASE_REQUIRED: { @@ -1075,7 +1077,7 @@ NativeWifiNetworkParser::~NativeWifiNetworkParser() {} bool NativeWifiNetworkParser::ParseValue(PropertyIndex index, const base::Value& value, Network* network) { - DCHECK(TYPE_WIFI == network->type()); + CHECK_EQ(TYPE_WIFI, network->type()); WifiNetwork* wifi_network = static_cast<WifiNetwork*>(network); switch (index) { case PROPERTY_INDEX_WIFI_HEX_SSID: { @@ -1255,7 +1257,7 @@ NativeVirtualNetworkParser::~NativeVirtualNetworkParser() {} bool NativeVirtualNetworkParser::UpdateNetworkFromInfo( const DictionaryValue& info, Network* network) { - DCHECK_EQ(TYPE_VPN, network->type()); + CHECK_EQ(TYPE_VPN, network->type()); VirtualNetwork* virtual_network = static_cast<VirtualNetwork*>(network); if (!NativeNetworkParser::UpdateNetworkFromInfo(info, network)) return false; @@ -1273,7 +1275,7 @@ bool NativeVirtualNetworkParser::UpdateNetworkFromInfo( bool NativeVirtualNetworkParser::ParseValue(PropertyIndex index, const base::Value& value, Network* network) { - DCHECK_EQ(TYPE_VPN, network->type()); + CHECK_EQ(TYPE_VPN, network->type()); VirtualNetwork* virtual_network = static_cast<VirtualNetwork*>(network); switch (index) { case PROPERTY_INDEX_PROVIDER: { diff --git a/chrome/browser/chromeos/cros/network_library.cc b/chrome/browser/chromeos/cros/network_library.cc index d5237fb..bcca34a 100644 --- a/chrome/browser/chromeos/cros/network_library.cc +++ b/chrome/browser/chromeos/cros/network_library.cc @@ -549,7 +549,7 @@ void VirtualNetwork::AttemptConnection(const base::Closure& connect) { } void VirtualNetwork::CopyCredentialsFromRemembered(Network* remembered) { - DCHECK_EQ(remembered->type(), TYPE_VPN); + CHECK_EQ(remembered->type(), TYPE_VPN); VirtualNetwork* remembered_vpn = static_cast<VirtualNetwork*>(remembered); VLOG(1) << "Copy VPN credentials: " << name() << " username: " << remembered_vpn->username(); diff --git a/chrome/browser/chromeos/cros/network_library_impl_cros.cc b/chrome/browser/chromeos/cros/network_library_impl_cros.cc index 9036770..eac7765 100644 --- a/chrome/browser/chromeos/cros/network_library_impl_cros.cc +++ b/chrome/browser/chromeos/cros/network_library_impl_cros.cc @@ -235,7 +235,7 @@ void NetworkLibraryImplCros::WifiServiceUpdateAndConnect( const base::DictionaryValue* properties) { if (properties) { Network* network = ParseNetwork(service_path, *properties); - DCHECK_EQ(network->type(), TYPE_WIFI); + CHECK_EQ(network->type(), TYPE_WIFI); ConnectToWifiNetworkUsingConnectData(static_cast<WifiNetwork*>(network)); } } @@ -257,7 +257,7 @@ void NetworkLibraryImplCros::VPNServiceUpdateAndConnect( if (properties) { VLOG(1) << "Connecting to new VPN Service: " << service_path; Network* network = ParseNetwork(service_path, *properties); - DCHECK_EQ(network->type(), TYPE_VPN); + CHECK_EQ(network->type(), TYPE_VPN); ConnectToVirtualNetworkUsingConnectData( static_cast<VirtualNetwork*>(network)); } else { @@ -626,19 +626,19 @@ void NetworkLibraryImplCros::NetworkManagerStatusChanged( // Currently we ignore the network manager state. break; case PROPERTY_INDEX_AVAILABLE_TECHNOLOGIES: { - DCHECK_EQ(value->GetType(), Value::TYPE_LIST); + CHECK_EQ(value->GetType(), Value::TYPE_LIST); const ListValue* vlist = static_cast<const ListValue*>(value); UpdateAvailableTechnologies(vlist); break; } case PROPERTY_INDEX_ENABLED_TECHNOLOGIES: { - DCHECK_EQ(value->GetType(), Value::TYPE_LIST); + CHECK_EQ(value->GetType(), Value::TYPE_LIST); const ListValue* vlist = static_cast<const ListValue*>(value); UpdateEnabledTechnologies(vlist); break; } case PROPERTY_INDEX_CONNECTED_TECHNOLOGIES: { - DCHECK_EQ(value->GetType(), Value::TYPE_LIST); + CHECK_EQ(value->GetType(), Value::TYPE_LIST); const ListValue* vlist = static_cast<const ListValue*>(value); UpdateConnectedTechnologies(vlist); break; @@ -663,27 +663,27 @@ void NetworkLibraryImplCros::NetworkManagerStatusChanged( break; } case PROPERTY_INDEX_PROFILES: { - DCHECK_EQ(value->GetType(), Value::TYPE_LIST); + CHECK_EQ(value->GetType(), Value::TYPE_LIST); const ListValue* vlist = static_cast<const ListValue*>(value); UpdateRememberedNetworks(vlist); RequestRememberedNetworksUpdate(); break; } case PROPERTY_INDEX_SERVICES: { - DCHECK_EQ(value->GetType(), Value::TYPE_LIST); + CHECK_EQ(value->GetType(), Value::TYPE_LIST); const ListValue* vlist = static_cast<const ListValue*>(value); UpdateNetworkServiceList(vlist); break; } case PROPERTY_INDEX_SERVICE_WATCH_LIST: { - DCHECK_EQ(value->GetType(), Value::TYPE_LIST); + CHECK_EQ(value->GetType(), Value::TYPE_LIST); const ListValue* vlist = static_cast<const ListValue*>(value); UpdateWatchedNetworkServiceList(vlist); break; } case PROPERTY_INDEX_DEVICE: case PROPERTY_INDEX_DEVICES: { - DCHECK_EQ(value->GetType(), Value::TYPE_LIST); + CHECK_EQ(value->GetType(), Value::TYPE_LIST); const ListValue* vlist = static_cast<const ListValue*>(value); UpdateNetworkDeviceList(vlist); break; |