diff 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
line wrap: on
line diff
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -2776,7 +2776,15 @@ ngx_http_get_forwarded_addr(ngx_http_req
 
         if (IN6_IS_ADDR_V4MAPPED(inaddr6)) {
             family = AF_INET;
-            inaddr = *(in_addr_t *) &inaddr6->s6_addr[12];
+
+            p = inaddr6->s6_addr;
+
+            inaddr = p[12] << 24;
+            inaddr += p[13] << 16;
+            inaddr += p[14] << 8;
+            inaddr += p[15];
+
+            inaddr = htonl(inaddr);
         }
     }
 #endif