Wine: gethostbyname implementation in WS2_32 is buggy

Andreas Mohr andi at rhlx01.fht-esslingen.de
Fri May 16 15:03:14 CDT 2003


On Fri, May 16, 2003 at 04:59:18PM +0100,   wrote:
> Hi,
> 
> I am not confident how this patch-submission bussiness
> works, so I will just quickly describe what's wrong
> and how to fix it.
> 
> The current implementation of gethostbyname in WS2_32
> (located in winsock/socket.c) doesn't handle a null
> string argument correctly.
> 
> According to MS definition of gethostbyname, when it
> receives a null argument, it should return the same
> result as if a call to gethostname was made. Currently
> Wine doesn't do this: it simply crashes.
> 
> Fix is simple: add something like:
> if (name == NULL) return __ws_gethostbyname(
> "localhost", WS_DUP_LINEAR );
Is this the way it's supposed to be handled?
I interpreted this (in my original patch I sent very recently) as
something like:

--- dlls/winsock/socket.c       13 May 2003 04:43:44 -0000      1.126
+++ dlls/winsock/socket.c       16 May 2003 20:00:28 -0000
@@ -2893,6 +2893,17 @@
     int ebufsize=1024;
     struct hostent hostentry;
     int locerr = ENOBUFS;
+    char local_name[256];
+
+    /* name == NULL means use the local host name */
+    if (name == NULL)
+    {
+        if (WS_gethostname(local_name, sizeof(local_name)) != 0)
+            return NULL;
+···············
+        name = local_name;
+    }
+····
     host = NULL;

Which way is the right one? First? Second? Both? :)

-- 
Help prevent Information Technology Fascism! - before it's too late...
http://www.againsttcpa.com



More information about the wine-patches mailing list