Fix possible buffer overrun/corruption spotted by Fred.

This commit is contained in:
Richard Frith-Macdonald 2021-08-09 08:28:13 +01:00
parent 35ef9423e0
commit 25b25080c3
2 changed files with 6 additions and 6 deletions

View file

@ -33,7 +33,7 @@ typedef union {
struct sockaddr s; struct sockaddr s;
struct sockaddr_in i4; struct sockaddr_in i4;
#ifdef AF_INET6 #ifdef AF_INET6
struct sockaddr_in i6; struct sockaddr_in6 i6;
#endif #endif
#ifndef _WIN32 #ifndef _WIN32
struct sockaddr_un u; struct sockaddr_un u;

View file

@ -1561,7 +1561,7 @@ setNonBlocking(SOCKET fd)
if (result == nil && _address.s.sa_family != AF_UNSPEC) if (result == nil && _address.s.sa_family != AF_UNSPEC)
{ {
SOCKET s = [self _sock]; SOCKET s = [self _sock];
struct sockaddr sin; sockaddr_any sin;
socklen_t size = sizeof(sin); socklen_t size = sizeof(sin);
memset(&sin, '\0', size); memset(&sin, '\0', size);
@ -1569,7 +1569,7 @@ setNonBlocking(SOCKET fd)
{ {
if (getsockname(s, (struct sockaddr*)&sin, (OPTLEN*)&size) != -1) if (getsockname(s, (struct sockaddr*)&sin, (OPTLEN*)&size) != -1)
{ {
result = GSPrivateSockaddrHost(&sin); result = GSPrivateSockaddrHost((struct sockaddr*)&sin);
} }
} }
else if ([key isEqualToString: GSStreamLocalPortKey]) else if ([key isEqualToString: GSStreamLocalPortKey])
@ -1577,14 +1577,14 @@ setNonBlocking(SOCKET fd)
if (getsockname(s, (struct sockaddr*)&sin, (OPTLEN*)&size) != -1) if (getsockname(s, (struct sockaddr*)&sin, (OPTLEN*)&size) != -1)
{ {
result = [NSString stringWithFormat: @"%d", result = [NSString stringWithFormat: @"%d",
(int)GSPrivateSockaddrPort(&sin)]; (int)GSPrivateSockaddrPort((struct sockaddr*)&sin)];
} }
} }
else if ([key isEqualToString: GSStreamRemoteAddressKey]) else if ([key isEqualToString: GSStreamRemoteAddressKey])
{ {
if (getpeername(s, (struct sockaddr*)&sin, (OPTLEN*)&size) != -1) if (getpeername(s, (struct sockaddr*)&sin, (OPTLEN*)&size) != -1)
{ {
result = GSPrivateSockaddrHost(&sin); result = GSPrivateSockaddrHost((struct sockaddr*)&sin);
} }
} }
else if ([key isEqualToString: GSStreamRemotePortKey]) else if ([key isEqualToString: GSStreamRemotePortKey])
@ -1592,7 +1592,7 @@ setNonBlocking(SOCKET fd)
if (getpeername(s, (struct sockaddr*)&sin, (OPTLEN*)&size) != -1) if (getpeername(s, (struct sockaddr*)&sin, (OPTLEN*)&size) != -1)
{ {
result = [NSString stringWithFormat: @"%d", result = [NSString stringWithFormat: @"%d",
(int)GSPrivateSockaddrPort(&sin)]; (int)GSPrivateSockaddrPort((struct sockaddr*)&sin)];
} }
} }
} }