2009/2/5 Nikolay Sivov <bunglehead(a)gmail.com>:
Changelog: - Check for null endpoint in RpcServerUseProtseqEpExW. Installed IE8 RC1 crashes on this call, parameter set is specified in test case.
From 89f889b2c7a754302b599884577b4eba22b3d235 Mon Sep 17 00:00:00 2001 From: Nikolay Sivov <bunglehead(a)gmail.com> Date: Thu, 5 Feb 2009 22:03:48 +0300 Subject: Check for null endpoint in RpcServerUseProtseqEpExW
--- dlls/rpcrt4/rpc_server.c | 6 ++++-- dlls/rpcrt4/tests/rpc.c | 15 +++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/dlls/rpcrt4/rpc_server.c b/dlls/rpcrt4/rpc_server.c index b6e058a..e9bed42 100644 --- a/dlls/rpcrt4/rpc_server.c +++ b/dlls/rpcrt4/rpc_server.c @@ -775,8 +775,10 @@ RPC_STATUS WINAPI RpcServerUseProtseqEpExW( RPC_WSTR Protseq, UINT MaxCalls, RPC return status;
EndpointA = RPCRT4_strdupWtoA(Endpoint); - status = RPCRT4_use_protseq(ps, EndpointA); - RPCRT4_strfree(EndpointA); + if (EndpointA) { + status = RPCRT4_use_protseq(ps, EndpointA); + RPCRT4_strfree(EndpointA); + }
This isn't correct, I'm afraid. The protseq open function should generate an endpoint name to use. For example, the ncacn_ip_tcp code should select a random available TCP port.
return status; }
diff --git a/dlls/rpcrt4/tests/rpc.c b/dlls/rpcrt4/tests/rpc.c index bf538e4..b815acc 100644 --- a/dlls/rpcrt4/tests/rpc.c +++ b/dlls/rpcrt4/tests/rpc.c @@ -830,6 +830,20 @@ static void test_UuidCreate(void) } }
+static void test_RpcServerUseProtseqEpEx(void) +{ + RPC_STATUS status; + RPC_POLICY policy; + static WCHAR protW[] = {'n','c','a','l','r','p','c',0}; + + policy.Length = sizeof( policy ); + policy.EndpointFlags = 0; + policy.NICFlags = 0; + + status = RpcServerUseProtseqEpExW(protW, 10, NULL, NULL, &policy); + ok(status == RPC_S_OK, "Expected RPC_S_OK, got %d\n", status); +}
This is a good start, but you should also test the bindings created as a result of doing this and then you will probably discover that the fix to RpcServerUseProtseqEpExW isn't quite correct.
START_TEST( rpc ) { static unsigned char ncacn_np[] = "ncacn_np"; @@ -849,4 +863,5 @@ START_TEST( rpc ) test_endpoint_mapper(ncalrpc, NULL, lrpc_endpoint); test_RpcStringBindingFromBinding(); test_UuidCreate(); + test_RpcServerUseProtseqEpEx(); }
-- Rob Shearman