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++) {