Rob Shearman : rpcrt4: Don' t get or create an association for bindings with incomplete endpoints.
Alexandre Julliard
julliard at winehq.org
Tue Aug 19 08:46:31 CDT 2008
Module: wine
Branch: master
Commit: e98539520d1ae548f3d6c547caacc27c3567d7d6
URL: http://source.winehq.org/git/wine.git/?a=commit;h=e98539520d1ae548f3d6c547caacc27c3567d7d6
Author: Rob Shearman <robertshearman at gmail.com>
Date: Mon Aug 18 21:13:41 2008 +0100
rpcrt4: Don't get or create an association for bindings with incomplete endpoints.
It's inefficient since the association will have to be replaced before
the binding can be used to connect to a server.
---
dlls/rpcrt4/rpc_binding.c | 42 ++++++++++++++++++++----------------------
1 files changed, 20 insertions(+), 22 deletions(-)
diff --git a/dlls/rpcrt4/rpc_binding.c b/dlls/rpcrt4/rpc_binding.c
index a154c1d..4452d30 100644
--- a/dlls/rpcrt4/rpc_binding.c
+++ b/dlls/rpcrt4/rpc_binding.c
@@ -157,20 +157,19 @@ static RPC_STATUS RPCRT4_CompleteBindingA(RpcBinding* Binding, LPCSTR NetworkAdd
RPCRT4_strfree(Binding->NetworkAddr);
Binding->NetworkAddr = RPCRT4_strdupA(NetworkAddr);
RPCRT4_strfree(Binding->Endpoint);
- if (Endpoint) {
- Binding->Endpoint = RPCRT4_strdupA(Endpoint);
- } else {
- Binding->Endpoint = RPCRT4_strdupA("");
- }
+ Binding->Endpoint = RPCRT4_strdupA(Endpoint);
HeapFree(GetProcessHeap(), 0, Binding->NetworkOptions);
Binding->NetworkOptions = RPCRT4_strdupAtoW(NetworkOptions);
- if (!Binding->Endpoint) ERR("out of memory?\n");
- status = RPCRT4_GetAssociation(Binding->Protseq, Binding->NetworkAddr,
- Binding->Endpoint, Binding->NetworkOptions,
- &Binding->Assoc);
- if (status != RPC_S_OK)
- return status;
+ /* only attempt to get an association if the binding is complete */
+ if (Endpoint && Endpoint[0] != '\0')
+ {
+ status = RPCRT4_GetAssociation(Binding->Protseq, Binding->NetworkAddr,
+ Binding->Endpoint, Binding->NetworkOptions,
+ &Binding->Assoc);
+ if (status != RPC_S_OK)
+ return status;
+ }
return RPC_S_OK;
}
@@ -186,20 +185,19 @@ static RPC_STATUS RPCRT4_CompleteBindingW(RpcBinding* Binding, LPCWSTR NetworkAd
RPCRT4_strfree(Binding->NetworkAddr);
Binding->NetworkAddr = RPCRT4_strdupWtoA(NetworkAddr);
RPCRT4_strfree(Binding->Endpoint);
- if (Endpoint) {
- Binding->Endpoint = RPCRT4_strdupWtoA(Endpoint);
- } else {
- Binding->Endpoint = RPCRT4_strdupA("");
- }
- if (!Binding->Endpoint) ERR("out of memory?\n");
+ Binding->Endpoint = RPCRT4_strdupWtoA(Endpoint);
HeapFree(GetProcessHeap(), 0, Binding->NetworkOptions);
Binding->NetworkOptions = RPCRT4_strdupW(NetworkOptions);
- status = RPCRT4_GetAssociation(Binding->Protseq, Binding->NetworkAddr,
- Binding->Endpoint, Binding->NetworkOptions,
- &Binding->Assoc);
- if (status != RPC_S_OK)
- return status;
+ /* only attempt to get an association if the binding is complete */
+ if (Endpoint && Endpoint[0] != '\0')
+ {
+ status = RPCRT4_GetAssociation(Binding->Protseq, Binding->NetworkAddr,
+ Binding->Endpoint, Binding->NetworkOptions,
+ &Binding->Assoc);
+ if (status != RPC_S_OK)
+ return status;
+ }
return RPC_S_OK;
}
More information about the wine-cvs
mailing list