diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index cc19f0ca8..55ecac0fc 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,8 @@ +2009-06-13 Corinna Vinschen + + * fhandler_socket.cc (fhandler_socket::recv_internal): Set namelen + pointer to NULL if name pointer is NULL. Explain why. + 2009-06-12 Corinna Vinschen * localtime.cc (time2): Change "spring gap" to "spring forward gap" diff --git a/winsup/cygwin/fhandler_socket.cc b/winsup/cygwin/fhandler_socket.cc index 7ab1ce8eb..93af60ee4 100644 --- a/winsup/cygwin/fhandler_socket.cc +++ b/winsup/cygwin/fhandler_socket.cc @@ -1347,7 +1347,12 @@ fhandler_socket::recv_internal (LPWSAMSG wsamsg) res = WSARecvMsg (get_socket (), wsamsg, &wret, NULL, NULL); else res = WSARecvFrom (get_socket (), wsabuf, wsacnt, &wret, - &wsamsg->dwFlags, wsamsg->name, &wsamsg->namelen, + &wsamsg->dwFlags, wsamsg->name, + /* Winsock returns WSAEFAULT if namelen is a valid + pointer while name is NULL. Both parameters are + ignored for TCP sockets, so this only occurs when + using UDP socket. */ + wsamsg->name ? &wsamsg->namelen : NULL, NULL, NULL); if (!res) {