Mercurial > hg > nginx-quic
comparison src/http/ngx_http_core_module.c @ 4828:f57154322e0e
Fixed strict aliasing bugs when dealing with IPv4-mapped IPv6 addresses
(closes #201).
author | Ruslan Ermilov <ru@nginx.com> |
---|---|
date | Thu, 30 Aug 2012 14:58:11 +0000 |
parents | 6e46016ea276 |
children | 6f085bfcdb4d |
comparison
equal
deleted
inserted
replaced
4827:6e46016ea276 | 4828:f57154322e0e |
---|---|
2774 else if (family == AF_INET6) { | 2774 else if (family == AF_INET6) { |
2775 inaddr6 = &((struct sockaddr_in6 *) addr->sockaddr)->sin6_addr; | 2775 inaddr6 = &((struct sockaddr_in6 *) addr->sockaddr)->sin6_addr; |
2776 | 2776 |
2777 if (IN6_IS_ADDR_V4MAPPED(inaddr6)) { | 2777 if (IN6_IS_ADDR_V4MAPPED(inaddr6)) { |
2778 family = AF_INET; | 2778 family = AF_INET; |
2779 inaddr = *(in_addr_t *) &inaddr6->s6_addr[12]; | 2779 |
2780 p = inaddr6->s6_addr; | |
2781 | |
2782 inaddr = p[12] << 24; | |
2783 inaddr += p[13] << 16; | |
2784 inaddr += p[14] << 8; | |
2785 inaddr += p[15]; | |
2786 | |
2787 inaddr = htonl(inaddr); | |
2780 } | 2788 } |
2781 } | 2789 } |
2782 #endif | 2790 #endif |
2783 | 2791 |
2784 for (cidr = proxies->elts, i = 0; i < proxies->nelts; i++) { | 2792 for (cidr = proxies->elts, i = 0; i < proxies->nelts; i++) { |