]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
Fixup strict aliasing safer.
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Mon, 22 Jun 2009 07:56:19 +0000 (07:56 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Mon, 22 Jun 2009 07:56:19 +0000 (07:56 +0000)
git-svn-id: file:///svn/unbound/trunk@1680 be551aaa-1e26-0410-a405-d3ace91eadb9

iterator/iter_priv.c

index 66394ad53e94ab9079e7be78d1c1e8ebb14a24c6..03cf6db858f11239e899cfae379af4d0a9ce4f46 100644 (file)
@@ -210,6 +210,9 @@ size_t priv_get_mem(struct iter_priv* priv)
 int priv_rrset_bad(struct iter_priv* priv, ldns_buffer* pkt,
        struct rrset_parse* rrset)
 {
+       if(priv->a.count == 0) 
+               return 0; /* there are no blocked addresses */
+
        /* see if it is a private name, that is allowed to have any */
        if(priv_lookup_name(priv, pkt, rrset->dname, rrset->dname_len,
                ntohs(rrset->rrset_class))) {
@@ -219,7 +222,9 @@ int priv_rrset_bad(struct iter_priv* priv, ldns_buffer* pkt,
                socklen_t len;
                struct rr_parse* rr;
                if(rrset->type == LDNS_RR_TYPE_A) {
+                       struct sockaddr_storage addr;
                        struct sockaddr_in sa;
+
                        len = (socklen_t)sizeof(sa);
                        memset(&sa, 0, len);
                        sa.sin_family = AF_INET;
@@ -230,11 +235,12 @@ int priv_rrset_bad(struct iter_priv* priv, ldns_buffer* pkt,
                                        continue;
                                memmove(&sa.sin_addr, rr->ttl_data+4+2, 
                                        INET_SIZE);
-                               if(priv_lookup_addr(priv, 
-                                       (struct sockaddr_storage*)&sa, len))
+                               memmove(&addr, &sa, len);
+                               if(priv_lookup_addr(priv, &addr, len))
                                        return 1;
                        }
                } else if(rrset->type == LDNS_RR_TYPE_AAAA) {
+                       struct sockaddr_storage addr;
                        struct sockaddr_in6 sa;
                        len = (socklen_t)sizeof(sa);
                        memset(&sa, 0, len);
@@ -246,8 +252,8 @@ int priv_rrset_bad(struct iter_priv* priv, ldns_buffer* pkt,
                                        continue;
                                memmove(&sa.sin6_addr, rr->ttl_data+4+2, 
                                        INET6_SIZE);
-                               if(priv_lookup_addr(priv, 
-                                       (struct sockaddr_storage*)&sa, len))
+                               memmove(&addr, &sa, len);
+                               if(priv_lookup_addr(priv, &addr, len)) 
                                        return 1;
                        }
                }