From: Wouter Wijngaards Date: Mon, 22 Jun 2009 07:56:19 +0000 (+0000) Subject: Fixup strict aliasing safer. X-Git-Tag: release-1.3.1~27 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8b2f5dcaf0a8eab29fdc6e38c4002fa9daf002b7;p=thirdparty%2Funbound.git Fixup strict aliasing safer. git-svn-id: file:///svn/unbound/trunk@1680 be551aaa-1e26-0410-a405-d3ace91eadb9 --- diff --git a/iterator/iter_priv.c b/iterator/iter_priv.c index 66394ad53..03cf6db85 100644 --- a/iterator/iter_priv.c +++ b/iterator/iter_priv.c @@ -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; } }