A little defensive programming in winsock.

lawson_whitney at juno.com lawson_whitney at juno.com
Wed Feb 13 16:25:10 CST 2002


Good day!

I saw this with a test winsock program Anibal Jodorcovsky sent me, which
is said to work in Windows 2000.

If wsaddr is NULL, probably wsaddrlen is too, so it doesn't matter if
*wsaddrlen is zero.  I think it makes sense to reorder the tests as I
have done.  I'm attaching one in case the inline one folds.

ChangeLog:
	dlls/winsock/socket.c:
	Lawson Whitney <lawson_whitney at juno.com>
	Protect against NULL wsaddrlen in ws_sockaddr_alloc.

diff -ur was/dlls/winsock/socket.c is/dlls/winsock/socket.c
--- was/dlls/winsock/socket.c	Tue Jan 29 18:29:07 2002
+++ is/dlls/winsock/socket.c	Wed Feb 13 16:44:47 2002
@@ -838,12 +838,12 @@
 /* allocates a Unix sockaddr structure to receive the data */
 inline struct sockaddr* ws_sockaddr_alloc(const struct WS_sockaddr* wsaddr, int* wsaddrlen, int* uaddrlen)
 {
+    if (wsaddr==NULL)
+        return NULL;
     if (*wsaddrlen==0)
         *uaddrlen=0;
     else
         *uaddrlen=max(sizeof(struct sockaddr),*wsaddrlen);
-    if (wsaddr==NULL)
-        return NULL;

     return malloc(*uaddrlen);
 }




-------------- next part --------------
diff -ur was/dlls/winsock/socket.c is/dlls/winsock/socket.c
--- was/dlls/winsock/socket.c	Tue Jan 29 18:29:07 2002
+++ is/dlls/winsock/socket.c	Wed Feb 13 16:44:47 2002
@@ -838,12 +838,12 @@
 /* allocates a Unix sockaddr structure to receive the data */
 inline struct sockaddr* ws_sockaddr_alloc(const struct WS_sockaddr* wsaddr, int* wsaddrlen, int* uaddrlen)
 {
+    if (wsaddr==NULL)
+        return NULL;
     if (*wsaddrlen==0)
         *uaddrlen=0;
     else
         *uaddrlen=max(sizeof(struct sockaddr),*wsaddrlen);
-    if (wsaddr==NULL)
-        return NULL;
 
     return malloc(*uaddrlen);
 }


More information about the wine-patches mailing list