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 <[email protected]>
@@ -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;