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_in i4;
#ifdef AF_INET6
struct sockaddr_in i6;
struct sockaddr_in6 i6;
#endif
#ifndef _WIN32
struct sockaddr_un u;

View file

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