summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-28 05:42:07 +0000
committerhashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-28 05:42:07 +0000
commit5b62b3109c123b99ee793284e0dd8cf2610273e1 (patch)
tree7cf3fcc83f47777d621e2a67c31ce6feb855a4f0
parentf02bc771ef62584d8ace4c02dba719ef57d51af0 (diff)
downloadchromium_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.cc16
-rw-r--r--chrome/browser/chromeos/cros/network_library.cc2
-rw-r--r--chrome/browser/chromeos/cros/network_library_impl_cros.cc18
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;