| Index: net/dns/host_resolver_impl.cc
|
| diff --git a/net/dns/host_resolver_impl.cc b/net/dns/host_resolver_impl.cc
|
| index d5602a4c674cad2848bb9d28cc77b0ad85d5333f..853eb54dfd1e95c2d23b8db1f9e73ccf1c86ccfd 100644
|
| --- a/net/dns/host_resolver_impl.cc
|
| +++ b/net/dns/host_resolver_impl.cc
|
| @@ -35,6 +35,7 @@
|
| #include "net/base/dns_reloader.h"
|
| #include "net/base/dns_util.h"
|
| #include "net/base/host_port_pair.h"
|
| +#include "net/base/ip_endpoint.h"
|
| #include "net/base/net_errors.h"
|
| #include "net/base/net_log.h"
|
| #include "net/base/net_util.h"
|
| @@ -182,7 +183,7 @@ bool IsGloballyReachable(const IPAddressNumber& dest,
|
| rv = socket->GetLocalAddress(&endpoint);
|
| if (rv != OK)
|
| return false;
|
| - DCHECK(endpoint.GetFamily() == ADDRESS_FAMILY_IPV6);
|
| + DCHECK_EQ(ADDRESS_FAMILY_IPV6, endpoint.GetFamily());
|
| const IPAddressNumber& address = endpoint.address();
|
| bool is_link_local = (address[0] == 0xFE) && ((address[1] & 0xC0) == 0x80);
|
| if (is_link_local)
|
| @@ -2032,10 +2033,18 @@ bool HostResolverImpl::ResolveAsIP(const Key& key,
|
| ~(HOST_RESOLVER_CANONNAME | HOST_RESOLVER_LOOPBACK_ONLY |
|
| HOST_RESOLVER_DEFAULT_FAMILY_SET_DUE_TO_NO_IPV6),
|
| 0) << " Unhandled flag";
|
| - bool ipv6_disabled = (default_address_family_ == ADDRESS_FAMILY_IPV4) &&
|
| - !probe_ipv6_support_;
|
| +
|
| *net_error = OK;
|
| - if ((ip_number.size() == kIPv6AddressSize) && ipv6_disabled) {
|
| + AddressFamily family = GetAddressFamily(ip_number);
|
| + if (family == ADDRESS_FAMILY_IPV6 &&
|
| + !probe_ipv6_support_ &&
|
| + default_address_family_ == ADDRESS_FAMILY_IPV4) {
|
| + // Don't return IPv6 addresses if default address family is set to IPv4,
|
| + // and probes are disabled.
|
| + *net_error = ERR_NAME_NOT_RESOLVED;
|
| + } else if (key.address_family != ADDRESS_FAMILY_UNSPECIFIED &&
|
| + key.address_family != family) {
|
| + // Don't return IPv6 addresses for IPv4 queries, and vice versa.
|
| *net_error = ERR_NAME_NOT_RESOLVED;
|
| } else {
|
| *addresses = AddressList::CreateFromIPAddress(ip_number, info.port());
|
|
|