Commit 70be64b2 authored by Bruno Jesus's avatar Bruno Jesus Committed by Alexandre Julliard

ws2_32: Handle NULL proto in WSAAsyncGetServByName.

parent ece5d712
...@@ -384,7 +384,7 @@ HANDLE WINAPI WSAAsyncGetServByName(HWND hWnd, UINT uMsg, LPCSTR name, ...@@ -384,7 +384,7 @@ HANDLE WINAPI WSAAsyncGetServByName(HWND hWnd, UINT uMsg, LPCSTR name,
{ {
struct async_query_getservbyname *aq; struct async_query_getservbyname *aq;
unsigned int len1 = strlen(name) + 1; unsigned int len1 = strlen(name) + 1;
unsigned int len2 = strlen(proto) + 1; unsigned int len2 = proto ? strlen(proto) + 1 : 0;
TRACE("hwnd %p, msg %04x, name %s, proto %s\n", hWnd, uMsg, debugstr_a(name), debugstr_a(proto)); TRACE("hwnd %p, msg %04x, name %s, proto %s\n", hWnd, uMsg, debugstr_a(name), debugstr_a(proto));
...@@ -393,10 +393,18 @@ HANDLE WINAPI WSAAsyncGetServByName(HWND hWnd, UINT uMsg, LPCSTR name, ...@@ -393,10 +393,18 @@ HANDLE WINAPI WSAAsyncGetServByName(HWND hWnd, UINT uMsg, LPCSTR name,
SetLastError( WSAEWOULDBLOCK ); SetLastError( WSAEWOULDBLOCK );
return 0; return 0;
} }
aq->serv_name = (char *)(aq + 1); aq->serv_name = (char *)(aq + 1);
aq->serv_proto = aq->serv_name + len1;
strcpy( aq->serv_name, name ); strcpy( aq->serv_name, name );
strcpy( aq->serv_proto, proto );
if (proto)
{
aq->serv_proto = aq->serv_name + len1;
strcpy( aq->serv_proto, proto );
}
else
aq->serv_proto = NULL;
return run_query( hWnd, uMsg, async_getservbyname, &aq->query, sbuf, buflen ); return run_query( hWnd, uMsg, async_getservbyname, &aq->query, sbuf, buflen );
} }
......
...@@ -5203,6 +5203,33 @@ static void test_WSAAsyncGetServByPort(void) ...@@ -5203,6 +5203,33 @@ static void test_WSAAsyncGetServByPort(void)
DestroyWindow(hwnd); DestroyWindow(hwnd);
} }
static void test_WSAAsyncGetServByName(void)
{
HWND hwnd = create_async_message_window();
HANDLE ret;
char buffer[MAXGETHOSTSTRUCT];
if (!hwnd)
return;
/* FIXME: The asynchronous window messages should be tested. */
/* Parameters are not checked when initiating the asynchronous operation. */
ret = WSAAsyncGetServByName(hwnd, WM_ASYNCCOMPLETE, "", NULL, NULL, 0);
ok(ret != NULL, "WSAAsyncGetServByName returned NULL\n");
ret = WSAAsyncGetServByName(hwnd, WM_ASYNCCOMPLETE, "", "", buffer, MAXGETHOSTSTRUCT);
ok(ret != NULL, "WSAAsyncGetServByName returned NULL\n");
ret = WSAAsyncGetServByName(hwnd, WM_ASYNCCOMPLETE, "http", NULL, NULL, 0);
ok(ret != NULL, "WSAAsyncGetServByName returned NULL\n");
ret = WSAAsyncGetServByName(hwnd, WM_ASYNCCOMPLETE, "http", "tcp", buffer, MAXGETHOSTSTRUCT);
ok(ret != NULL, "WSAAsyncGetServByName returned NULL\n");
DestroyWindow(hwnd);
}
static void test_completion_port(void) static void test_completion_port(void)
{ {
HANDLE previous_port, io_port; HANDLE previous_port, io_port;
...@@ -5770,6 +5797,7 @@ START_TEST( sock ) ...@@ -5770,6 +5797,7 @@ START_TEST( sock )
test_sioRoutingInterfaceQuery(); test_sioRoutingInterfaceQuery();
test_WSAAsyncGetServByPort(); test_WSAAsyncGetServByPort();
test_WSAAsyncGetServByName();
test_completion_port(); test_completion_port();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment