Fixup strict aliasing warning on Fedora 11.

git-svn-id: file:///svn/unbound/trunk@1674 be551aaa-1e26-0410-a405-d3ace91eadb9
This commit is contained in:
Wouter Wijngaards 2009-06-19 07:09:12 +00:00
parent c1b2364d1d
commit ef564b5a29
2 changed files with 19 additions and 16 deletions

View file

@ -1,3 +1,6 @@
19 June 2009: Wouter
- Fixup strict aliasing warning in iter priv code.
18 June 2009: Wouter 18 June 2009: Wouter
- Fix of message parse bug where (specifically) an NSEC and RRSIG - Fix of message parse bug where (specifically) an NSEC and RRSIG
in the wrong order would be parsed, but put wrongly into internal in the wrong order would be parsed, but put wrongly into internal

View file

@ -219,35 +219,35 @@ int priv_rrset_bad(struct iter_priv* priv, ldns_buffer* pkt,
socklen_t len; socklen_t len;
struct rr_parse* rr; struct rr_parse* rr;
if(rrset->type == LDNS_RR_TYPE_A) { if(rrset->type == LDNS_RR_TYPE_A) {
struct sockaddr_storage addr; struct sockaddr_in sa;
struct sockaddr_in* sa = (struct sockaddr_in*)&addr; len = (socklen_t)sizeof(sa);
len = (socklen_t)sizeof(*sa); memset(&sa, 0, len);
memset(sa, 0, len); sa.sin_family = AF_INET;
sa->sin_family = AF_INET; sa.sin_port = (in_port_t)htons(UNBOUND_DNS_PORT);
sa->sin_port = (in_port_t)htons(UNBOUND_DNS_PORT);
for(rr = rrset->rr_first; rr; rr = rr->next) { for(rr = rrset->rr_first; rr; rr = rr->next) {
if(ldns_read_uint16(rr->ttl_data+4) if(ldns_read_uint16(rr->ttl_data+4)
!= INET_SIZE) != INET_SIZE)
continue; continue;
memmove(&sa->sin_addr, rr->ttl_data+4+2, memmove(&sa.sin_addr, rr->ttl_data+4+2,
INET_SIZE); INET_SIZE);
if(priv_lookup_addr(priv, &addr, len)) if(priv_lookup_addr(priv,
(struct sockaddr_storage*)&sa, len))
return 1; return 1;
} }
} else if(rrset->type == LDNS_RR_TYPE_AAAA) { } else if(rrset->type == LDNS_RR_TYPE_AAAA) {
struct sockaddr_storage addr; struct sockaddr_in6 sa;
struct sockaddr_in6* sa = (struct sockaddr_in6*)&addr; len = (socklen_t)sizeof(sa);
len = (socklen_t)sizeof(*sa); memset(&sa, 0, len);
memset(sa, 0, len); sa.sin6_family = AF_INET6;
sa->sin6_family = AF_INET6; sa.sin6_port = (in_port_t)htons(UNBOUND_DNS_PORT);
sa->sin6_port = (in_port_t)htons(UNBOUND_DNS_PORT);
for(rr = rrset->rr_first; rr; rr = rr->next) { for(rr = rrset->rr_first; rr; rr = rr->next) {
if(ldns_read_uint16(rr->ttl_data+4) if(ldns_read_uint16(rr->ttl_data+4)
!= INET6_SIZE) != INET6_SIZE)
continue; continue;
memmove(&sa->sin6_addr, rr->ttl_data+4+2, memmove(&sa.sin6_addr, rr->ttl_data+4+2,
INET6_SIZE); INET6_SIZE);
if(priv_lookup_addr(priv, &addr, len)) if(priv_lookup_addr(priv,
(struct sockaddr_storage*)&sa, len))
return 1; return 1;
} }
} }