2009/2/5 Nikolay Sivov <bungleh...@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 <bungleh...@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