diff --git a/dlls/rpcrt4/rpc_binding.c b/dlls/rpcrt4/rpc_binding.c index b264b9a2bb8..212e201dbbb 100644 --- a/dlls/rpcrt4/rpc_binding.c +++ b/dlls/rpcrt4/rpc_binding.c @@ -785,8 +785,11 @@ RPC_STATUS WINAPI RpcBindingFree( RPC_BINDING_HANDLE* Binding ) { RPC_STATUS status; TRACE("(%p) = %p\n", Binding, *Binding); - status = RPCRT4_ReleaseBinding(*Binding); - if (status == RPC_S_OK) *Binding = 0; + if (*Binding) + status = RPCRT4_ReleaseBinding(*Binding); + else + status = RPC_S_INVALID_BINDING; + if (status == RPC_S_OK) *Binding = NULL; return status; } diff --git a/dlls/rpcrt4/tests/rpc.c b/dlls/rpcrt4/tests/rpc.c index 01d7392fe4d..0f742b20b48 100644 --- a/dlls/rpcrt4/tests/rpc.c +++ b/dlls/rpcrt4/tests/rpc.c @@ -800,6 +800,17 @@ static void test_UuidCreate(void) } } +static void test_RpcBindingFree(void) +{ + RPC_BINDING_HANDLE binding = NULL; + RPC_STATUS status; + + status = RpcBindingFree(&binding); + ok(status == RPC_S_INVALID_BINDING, + "RpcBindingFree should have retured RPC_S_INVALID_BINDING instead of %d\n", + status); +} + START_TEST( rpc ) { UuidConversionAndComparison(); @@ -811,4 +822,5 @@ START_TEST( rpc ) test_I_RpcExceptionFilter(); test_RpcStringBindingFromBinding(); test_UuidCreate(); + test_RpcBindingFree(); }