From 7fd34b5a62f736bd971d051cb934df2e7e3ec00e Mon Sep 17 00:00:00 2001 From: Joerg-Christian Boehme Date: Tue, 27 Nov 2018 15:25:05 +0100 Subject: [PATCH] Use sockaddr_storage for proper stack aligment (#2523) --- Net/src/SocketImpl.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Net/src/SocketImpl.cpp b/Net/src/SocketImpl.cpp index 5a2046867..f29c0d271 100644 --- a/Net/src/SocketImpl.cpp +++ b/Net/src/SocketImpl.cpp @@ -104,8 +104,8 @@ SocketImpl* SocketImpl::acceptConnection(SocketAddress& clientAddr) { if (_sockfd == POCO_INVALID_SOCKET) throw InvalidSocketException(); - char buffer[SocketAddress::MAX_ADDRESS_LENGTH]; - struct sockaddr* pSA = reinterpret_cast(buffer); + sockaddr_storage buffer; + struct sockaddr* pSA = reinterpret_cast(&buffer); poco_socklen_t saLen = sizeof(buffer); poco_socket_t sd; do @@ -502,8 +502,8 @@ int SocketImpl::sendTo(const SocketBufVec& buffers, const SocketAddress& address int SocketImpl::receiveFrom(void* buffer, int length, SocketAddress& address, int flags) { - char abuffer[SocketAddress::MAX_ADDRESS_LENGTH]; - struct sockaddr* pSA = reinterpret_cast(abuffer); + sockaddr_storage abuffer; + struct sockaddr* pSA = reinterpret_cast(&abuffer); poco_socklen_t saLen = sizeof(abuffer); poco_socklen_t* pSALen = &saLen; int rc = receiveFrom(buffer, length, &pSA, &pSALen, flags); @@ -541,8 +541,8 @@ int SocketImpl::receiveFrom(void* buffer, int length, struct sockaddr** ppSA, po int SocketImpl::receiveFrom(SocketBufVec& buffers, SocketAddress& address, int flags) { - char abuffer[SocketAddress::MAX_ADDRESS_LENGTH]; - struct sockaddr* pSA = reinterpret_cast(abuffer); + sockaddr_storage abuffer; + struct sockaddr* pSA = reinterpret_cast(&abuffer); poco_socklen_t saLen = sizeof(abuffer); poco_socklen_t* pSALen = &saLen; int rc = receiveFrom(buffers, &pSA, &pSALen, flags); @@ -846,8 +846,8 @@ SocketAddress SocketImpl::address() { if (_sockfd == POCO_INVALID_SOCKET) throw InvalidSocketException(); - char buffer[SocketAddress::MAX_ADDRESS_LENGTH]; - struct sockaddr* pSA = reinterpret_cast(buffer); + sockaddr_storage buffer; + struct sockaddr* pSA = reinterpret_cast(&buffer); poco_socklen_t saLen = sizeof(buffer); int rc = ::getsockname(_sockfd, pSA, &saLen); if (rc == 0) @@ -862,8 +862,8 @@ SocketAddress SocketImpl::peerAddress() { if (_sockfd == POCO_INVALID_SOCKET) throw InvalidSocketException(); - char buffer[SocketAddress::MAX_ADDRESS_LENGTH]; - struct sockaddr* pSA = reinterpret_cast(buffer); + sockaddr_storage buffer; + struct sockaddr* pSA = reinterpret_cast(&buffer); poco_socklen_t saLen = sizeof(buffer); int rc = ::getpeername(_sockfd, pSA, &saLen); if (rc == 0)