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