diff options
author | Adam Jackson <ajax@redhat.com> | 2017-12-13 14:53:56 -0500 |
---|---|---|
committer | Adam Jackson <ajax@redhat.com> | 2018-01-08 16:19:42 -0500 |
commit | 652913cd9474946bcb29271602bacfd98f46ad0b (patch) | |
tree | 106d2e8960ad692003d94c7a78821ca415d9415a /os | |
parent | da4ffb2f6a0b5a039ae1362ae71e9b47441f90d2 (diff) |
os: Fix a type error in the IPv6 XDMCP code
Building with strict-aliasing rightly chirps here:
../os/xdmcp.c: In function ‘XdmcpRegisterConnection’:
../os/xdmcp.c:489:31: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
&((struct sockaddr_in6 *) &address)->sin6_addr.s6_addr[12];
^~~~~~~~~~~~
We have "const char *address", so &address here is a char ** (i.e., it
points to the slot on the stack containing the pointer to the character
array passed in as an argument). Casting that to a struct sockaddr_in6 *
is wrong, because it means that area of the stack will be reinterpreted
as a struct sockaddr_in6.
Instead, cast address, not &address.
Signed-off-by: Adam Jackson <ajax@redhat.com>
Diffstat (limited to 'os')
-rw-r--r-- | os/xdmcp.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/os/xdmcp.c b/os/xdmcp.c index 7aeb393e6..d8c81fbf8 100644 --- a/os/xdmcp.c +++ b/os/xdmcp.c @@ -486,7 +486,7 @@ XdmcpRegisterConnection(int type, const char *address, int addrlen) IN6_IS_ADDR_V4MAPPED((const struct in6_addr *) address)) { fromAddr = &((struct sockaddr_in *) &FromAddress)->sin_addr; regAddr = - &((struct sockaddr_in6 *) &address)->sin6_addr.s6_addr[12]; + &((struct sockaddr_in6 *) address)->sin6_addr.s6_addr[12]; regAddrlen = sizeof(struct in_addr); } } |