comparison src/http/modules/ngx_http_geo_module.c @ 4857:880dedfa4008 stable-1.2

Merge of r4829: fixed strict aliasing with ipv6 (ticket #201). Fixed strict aliasing bugs when dealing with IPv4-mapped IPv6 addresses.
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 24 Sep 2012 19:06:48 +0000
parents f66d0a6d7fdd
children 9f4cdc7a8578 05beaa2d87b3
comparison
equal deleted inserted replaced
4856:43b7b9572fe1 4857:880dedfa4008
231 } 231 }
232 232
233 #if (NGX_HAVE_INET6) 233 #if (NGX_HAVE_INET6)
234 234
235 if (addr.sockaddr->sa_family == AF_INET6) { 235 if (addr.sockaddr->sa_family == AF_INET6) {
236 u_char *p;
237 in_addr_t inaddr;
236 struct in6_addr *inaddr6; 238 struct in6_addr *inaddr6;
237 239
238 inaddr6 = &((struct sockaddr_in6 *) addr.sockaddr)->sin6_addr; 240 inaddr6 = &((struct sockaddr_in6 *) addr.sockaddr)->sin6_addr;
239 241
240 if (IN6_IS_ADDR_V4MAPPED(inaddr6)) { 242 if (IN6_IS_ADDR_V4MAPPED(inaddr6)) {
241 return ntohl(*(in_addr_t *) &inaddr6->s6_addr[12]); 243 p = inaddr6->s6_addr;
244
245 inaddr = p[12] << 24;
246 inaddr += p[13] << 16;
247 inaddr += p[14] << 8;
248 inaddr += p[15];
249
250 return inaddr;
242 } 251 }
243 } 252 }
244 253
245 #endif 254 #endif
246 255