Robert Shearman : rpcrt4: Handle pointers to context handles in the stubless code.

Alexandre Julliard julliard at wine.codeweavers.com
Sat May 20 11:22:54 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: 6e7d06ad3484f23f75a25e558d09461a8ea94499
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=6e7d06ad3484f23f75a25e558d09461a8ea94499

Author: Robert Shearman <rob at codeweavers.com>
Date:   Fri May 19 16:04:23 2006 +0100

rpcrt4: Handle pointers to context handles in the stubless code.

Implement check for NULL context handles if requested.

---

 dlls/rpcrt4/ndr_stubless.c |   17 ++++++++++++++++-
 1 files changed, 16 insertions(+), 1 deletions(-)

diff --git a/dlls/rpcrt4/ndr_stubless.c b/dlls/rpcrt4/ndr_stubless.c
index 0131034..25d8fdd 100644
--- a/dlls/rpcrt4/ndr_stubless.c
+++ b/dlls/rpcrt4/ndr_stubless.c
@@ -470,8 +470,23 @@ LONG_PTR WINAPIV NdrClientCall2(PMIDL_ST
             case RPC_FC_BIND_CONTEXT: /* explicit context */
                 {
                     NDR_EHD_CONTEXT * pDesc = (NDR_EHD_CONTEXT *)&pFormat[current_offset];
+                    NDR_CCONTEXT context_handle;
                     TRACE("Explicit bind context\n");
-                    hBinding = NDRCContextBinding(*(NDR_CCONTEXT *)ARG_FROM_OFFSET(args, pDesc->offset));
+                    if (pDesc->flags & HANDLE_PARAM_IS_VIA_PTR)
+                    {
+                        TRACE("\tHANDLE_PARAM_IS_VIA_PTR\n");
+                        context_handle = **(NDR_CCONTEXT **)ARG_FROM_OFFSET(args, pDesc->offset);
+                    }
+                    else
+                        context_handle = *(NDR_CCONTEXT *)ARG_FROM_OFFSET(args, pDesc->offset);
+                    if ((pDesc->flags & NDR_CONTEXT_HANDLE_CANNOT_BE_NULL) &&
+                        !context_handle)
+                    {
+                        ERR("null context handle isn't allowed\n");
+                        RpcRaiseException(RPC_X_SS_IN_NULL_CONTEXT);
+                        return 0;
+                    }
+                    hBinding = NDRCContextBinding(context_handle);
                     /* FIXME: should we store this structure in stubMsg.pContext? */
                     current_offset += sizeof(NDR_EHD_CONTEXT);
                     break;




More information about the wine-cvs mailing list