Module Name: src Committed By: mrg Date: Sat Oct 19 22:58:40 UTC 2013
Modified Files: src/external/bsd/fetch/dist/libfetch: ftp.c Log Message: avoid a strict aliasing problem copying the mapped v4 address out of a ipv6 address. To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/external/bsd/fetch/dist/libfetch/ftp.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/external/bsd/fetch/dist/libfetch/ftp.c diff -u src/external/bsd/fetch/dist/libfetch/ftp.c:1.5 src/external/bsd/fetch/dist/libfetch/ftp.c:1.6 --- src/external/bsd/fetch/dist/libfetch/ftp.c:1.5 Wed Aug 17 09:19:38 2011 +++ src/external/bsd/fetch/dist/libfetch/ftp.c Sat Oct 19 22:58:40 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: ftp.c,v 1.5 2011/08/17 09:19:38 christos Exp $ */ +/* $NetBSD: ftp.c,v 1.6 2013/10/19 22:58:40 mrg Exp $ */ /*- * Copyright (c) 1998-2004 Dag-Erling Coïdan Smørgrav * Copyright (c) 2008, 2009, 2010 Joerg Sonnenberger <jo...@netbsd.org> @@ -138,6 +138,7 @@ static void unmappedaddr(struct sockaddr_in6 *sin6, socklen_t *len) { struct sockaddr_in *sin4; + void *addrp; uint32_t addr; int port; @@ -145,7 +146,8 @@ unmappedaddr(struct sockaddr_in6 *sin6, !IN6_IS_ADDR_V4MAPPED(&sin6->sin6_addr)) return; sin4 = (struct sockaddr_in *)(void *)sin6; - addr = *(uint32_t *)(void *)&sin6->sin6_addr.s6_addr[12]; + addrp = &sin6->sin6_addr.s6_addr[12]; + addr = *(uint32_t *)addrp; port = sin6->sin6_port; memset(sin4, 0, sizeof(struct sockaddr_in)); sin4->sin_addr.s_addr = addr;