Fix: do not assert when the address has more than one CNAME.
authorGuilherme Maciel Ferreira <guilherme.maciel.ferreira@gmail.com>
Sun, 18 Mar 2012 21:11:37 +0000 (18:11 -0300)
committerGuilherme Maciel Ferreira <guilherme.maciel.ferreira@gmail.com>
Sun, 18 Mar 2012 21:11:37 +0000 (18:11 -0300)
src/dns/dnsresolver.cpp

index 4ef6969..35492d9 100644 (file)
@@ -250,6 +250,8 @@ void DnsResolver::fill_resolved_ip_list(
     BOOST_ASSERT( 1 <= answers_list.size() );
     BOOST_ASSERT( resolved_host_address_list != NULL );
 
+    size_t cname_count = 0;
+
     BOOST_FOREACH( shared_ptr<resource_base_t> resource_record, answers_list )
     {
         if ( resource_record )
@@ -264,6 +266,9 @@ void DnsResolver::fill_resolved_ip_list(
                     // 'AAAA' resource records carry IPv6 addresses
                     append_resolved_ipv6( resource_record, resolved_host_address_list );
                     break;
+                case boost::net::dns::type_cname:
+                   // 'CNAME' resource records that carry aliases
+                   cname_count++;
                 default:
                     // other types of resource records
                     break;
@@ -274,7 +279,7 @@ void DnsResolver::fill_resolved_ip_list(
     size_t answer_list_size = answers_list.size();
     size_t resolve_host_list_size = resolved_host_address_list->size();
     bool size_equal = ( resolve_host_list_size == answer_list_size );
-    bool size_equal_minus_cname = ( resolve_host_list_size == ( answer_list_size - 1 ) );
+    bool size_equal_minus_cname = ( resolve_host_list_size == ( answer_list_size - cname_count ) );
     BOOST_ASSERT( size_equal || size_equal_minus_cname );
 }