From a4b18699ac6739caf0e089167e3e6d247a44f781 Mon Sep 17 00:00:00 2001 From: Rob Shearman Date: Thu, 17 Jan 2008 12:26:42 +0000 Subject: [PATCH] rpcrt4: Only initialise the context handle to NULL in NdrContextHandleUnmarshall if it is an out-only or return one. Fix the indentation and add tracing of the context handle flags. --- dlls/rpcrt4/ndr_marshall.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/dlls/rpcrt4/ndr_marshall.c b/dlls/rpcrt4/ndr_marshall.c index 0f415b05f83..888b1503182 100644 --- a/dlls/rpcrt4/ndr_marshall.c +++ b/dlls/rpcrt4/ndr_marshall.c @@ -6207,6 +6207,7 @@ static unsigned char *WINAPI NdrContextHandleMarshall( ERR("invalid format type %x\n", *pFormat); RpcRaiseException(RPC_S_INTERNAL_ERROR); } + TRACE("flags: 0x%02x\n", pFormat[1]); if (pFormat[1] & 0x80) NdrClientContextMarshall(pStubMsg, *(NDR_CCONTEXT **)pMemory, FALSE); @@ -6225,16 +6226,22 @@ static unsigned char *WINAPI NdrContextHandleUnmarshall( PFORMAT_STRING pFormat, unsigned char fMustAlloc) { + TRACE("pStubMsg %p, ppMemory %p, pFormat %p, fMustAlloc %s\n", pStubMsg, + ppMemory, pFormat, fMustAlloc ? "TRUE": "FALSE"); + if (*pFormat != RPC_FC_BIND_CONTEXT) { ERR("invalid format type %x\n", *pFormat); RpcRaiseException(RPC_S_INTERNAL_ERROR); } + TRACE("flags: 0x%02x\n", pFormat[1]); - **(NDR_CCONTEXT **)ppMemory = NULL; - NdrClientContextUnmarshall(pStubMsg, *(NDR_CCONTEXT **)ppMemory, pStubMsg->RpcMsg->Handle); + /* [out]-only or [ret] param */ + if ((pFormat[1] & 0x60) == 0x20) + **(NDR_CCONTEXT **)ppMemory = NULL; + NdrClientContextUnmarshall(pStubMsg, *(NDR_CCONTEXT **)ppMemory, pStubMsg->RpcMsg->Handle); - return NULL; + return NULL; } /***********************************************************************