Fix a delete type mismatch (deleting a sockaddr_in6* as a sockaddr*)

This triggered ASan, saying "object passed to delete has wrong type".
This error is caused by allocating a `struct sockaddr_in6`, casting it
and deleting it as `struct sockaddr*` which has a smaller size.

BUG=None

Review-Url: https://codereview.webrtc.org/2999053002
Cr-Commit-Position: refs/heads/master@{#19401}
This commit is contained in:
oprypin 2017-08-18 00:15:19 -07:00 committed by Commit Bot
parent 9e0c742f1b
commit 1ea631f4a7

View File

@ -10,8 +10,11 @@
#include "webrtc/rtc_base/network.h"
#include <stdlib.h>
#include <memory>
#include <vector>
#include "webrtc/rtc_base/checks.h"
#include "webrtc/rtc_base/nethelpers.h"
#include "webrtc/rtc_base/networkmonitor.h"
@ -122,7 +125,8 @@ class NetworkTest : public testing::Test, public sigslot::has_slots<> {
struct sockaddr_in6* CreateIpv6Addr(const std::string& ip_string,
uint32_t scope_id) {
struct sockaddr_in6* ipv6_addr = new struct sockaddr_in6;
struct sockaddr_in6* ipv6_addr = static_cast<struct sockaddr_in6*>(
malloc(sizeof(struct sockaddr_in6)));
memset(ipv6_addr, 0, sizeof(struct sockaddr_in6));
ipv6_addr->sin6_family = AF_INET6;
ipv6_addr->sin6_scope_id = scope_id;
@ -168,8 +172,8 @@ class NetworkTest : public testing::Test, public sigslot::has_slots<> {
struct ifaddrs* if_addr = list;
while (if_addr != nullptr) {
struct ifaddrs* next_addr = if_addr->ifa_next;
delete if_addr->ifa_addr;
delete if_addr->ifa_netmask;
free(if_addr->ifa_addr);
free(if_addr->ifa_netmask);
delete if_addr;
if_addr = next_addr;
}