2004-07-28 Dick Porter <dick@ximian.com>
authorDick Porter <dick@acm.org>
Wed, 28 Jul 2004 15:44:15 +0000 (15:44 -0000)
committerDick Porter <dick@acm.org>
Wed, 28 Jul 2004 15:44:15 +0000 (15:44 -0000)
* socket-io.c
(ves_icall_System_Net_Sockets_Socket_RecvFrom_internal): Check
returned sockaddr size before creating the remote address object.
Patch by Nick Vaughan (dev@6wardlaw.freeserve.co.uk), fixes bug
61608.

svn path=/branches/mono-1-0/mono/; revision=31561

mono/metadata/ChangeLog
mono/metadata/socket-io.c

index 2c352a82cf0ceb0e07561d15104be862428dbdd5..48f6cd2c8c2084dcb3337c398de480ee5bc9263f 100644 (file)
@@ -1,3 +1,11 @@
+2004-07-28  Dick Porter  <dick@ximian.com>
+
+       * socket-io.c
+       (ves_icall_System_Net_Sockets_Socket_RecvFrom_internal): Check
+       returned sockaddr size before creating the remote address object.
+       Patch by Nick Vaughan (dev@6wardlaw.freeserve.co.uk), fixes bug
+       61608.
+
 2004-07-28  Dick Porter  <dick@ximian.com>
 
        * locales.c (string_invariant_compare_char): Fix invariant char
index 1bb44ea75b27109cee2d117fbd2f1569e6366cd4..1ef49278ea93a38c9a4cc681dd1b9c1664f91ab2 100644 (file)
@@ -1160,7 +1160,15 @@ gint32 ves_icall_System_Net_Sockets_Socket_RecvFrom_internal(SOCKET sock, MonoAr
                return(0);
        }
 
-       *sockaddr=create_object_from_sockaddr(sa, sa_size, error);
+       /* If we didn't get a socket size, then we're probably a
+        * connected connection-oriented socket and the stack hasn't
+        * returned the remote address. All we can do is return null.
+        */
+       if ( sa_size != 0 )
+               *sockaddr=create_object_from_sockaddr(sa, sa_size, error);
+       else
+               *sockaddr=NULL;
+
        g_free(sa);
        
        return(ret);