Wine: gethostbyname implementation in WS2_32 is buggy
Uwe Bonnes
bon at elektron.ikp.physik.tu-darmstadt.de
Fri May 16 14:43:20 CDT 2003
>>>>> "rzroli" == <rzoli at yahoo.com> writes:
rzoli> Hi, I am not confident how this patch-submission bussiness
rzoli> works, so I will just quickly describe what's wrong and how to
rzoli> fix it.
rzoli> The current implementation of gethostbyname in WS2_32 (located
rzoli> in winsock/socket.c) doesn't handle a null string argument
rzoli> correctly.
rzoli> According to MS definition of gethostbyname, when it receives a
rzoli> null argument, it should return the same result as if a call to
rzoli> gethostname was made. Currently Wine doesn't do this: it simply
rzoli> crashes.
rzoli> Fix is simple: add something like: if (name == NULL) return
rzoli> __ws_gethostbyname( "localhost", WS_DUP_LINEAR );
rzoli> I hope this helps you out a bit. Good luck with the project,
rzoli> it's been very useful to me.
Do something like
cvs -d $CVSROOT diff -u wine/dlls/winsock/socket.c wine/dlls/winsock/tests/sock.c > winsock_patch
Write a Changelog:
wine/dlls/winsock/socket.c: gethostbyname
NULL as name is handled like gethostbyname
(as spooted by <rzoli at yahoo.com>)
and attach the patch
--
Uwe Bonnes bon at elektron.ikp.physik.tu-darmstadt.de
Institut fuer Kernphysik Schlossgartenstrasse 9 64289 Darmstadt
--------- Tel. 06151 162516 -------- Fax. 06151 164321 ----------
Index: wine/dlls/winsock/socket.c
===================================================================
RCS file: /home/wine/wine/dlls/winsock/socket.c,v
retrieving revision 1.126
diff -u -r1.126 socket.c
--- wine/dlls/winsock/socket.c 13 May 2003 04:43:44 -0000 1.126
+++ wine/dlls/winsock/socket.c 16 May 2003 19:38:15 -0000
@@ -2937,6 +2937,8 @@
struct WS_hostent* WINAPI WS_gethostbyname(const char* name)
{
TRACE( "%s\n", debugstr_a(name) );
+ if (name == NULL)
+ return __ws_gethostbyname("localhost", WS_DUP_LINEAR );
return __ws_gethostbyname( name, WS_DUP_LINEAR );
}
Index: wine/dlls/winsock/tests/sock.c
===================================================================
RCS file: /home/wine/wine/dlls/winsock/tests/sock.c,v
retrieving revision 1.9
diff -u -r1.9 sock.c
--- wine/dlls/winsock/tests/sock.c 2 Apr 2003 01:38:42 -0000 1.9
+++ wine/dlls/winsock/tests/sock.c 16 May 2003 19:38:19 -0000
@@ -676,6 +676,14 @@
}
};
+void test_gethostbyname(void)
+{
+ struct hostent* ret;
+
+ ret = gethostbyname(NULL);
+ ok (ret !=0, "gethostbyname(NULL) failed");
+
+}
/**************** Main program ***************/
START_TEST( sock )
@@ -689,6 +697,6 @@
do_test ( &tests[i] );
trace ( " **** TEST %d COMPLETE **** \n", i );
}
-
+ test_gethostbyname();
Exit();
}
More information about the wine-patches
mailing list